带分数 - DFS + 全排列
带分数:
可以表示为带分数的形式:100=3+69258 / 714 ;
还可以表示为:100=82+3546 / 197 ;
注意特征:带分数中,数字 1∼91∼9 分别出现且只出现一次(不包含 00)。
类似这样的带分数,100 有 11 种表示法。
输入格式
一个正整数。
输出格式
输出输入数字用数码 1∼9 不重复不遗漏地组成带分数表示的全部种数。
数据范围
1 ≤ N < 1000000
输入样例1:
100
输出样例1:
11
#include <stdio.h> int n, ans = 0; int a[10]; int niubi(int l, int r) { int i, sum = 0; for(i = l; i < r; i++) { sum = sum * 10 + a[i]; } return sum; } void dfs(int x) { int i, j, k; if(x == 9) { /* for(k = 0; k < 9; k++) { printf("%d ",a[k]); } printf("\nans = %d\n",ans); */ for(i = 1; i < 9; i++) { for(j = i + 1; j < 9; j++) { int q = niubi(0, i); int w = niubi(i, j); int e = niubi(j, 9); if(e == 0)continue; if(q + w / e == n && w % e == 0) { ans++; } } } return; } for(i = 1; i <= 9; i++) { if(book[i] == 0) { book[i] = 1; a[x] = i; dfs(x + 1); book[i] = 0; } } } int main() { scanf("%d",&n); dfs(0); printf("%d\n",ans); }

浙公网安备 33010602011771号