(除法)Division UVA - 725
2018-02-17 20:21
344 查看
题目链接:Division UVA - 725
思路:枚举0~9的所有排列?没这个必要。只需要枚举fghij就可以计算出abcde,然后判断是否所有数字都不相同即可。不仅程序简单,而且枚举量也从10!=3628800降低至不到1万,而且abcde和fghig加起来超过10位时可以终止枚举。由此可见,即使采用暴力枚举,也是需要认真分析问题的。
代码:
思路:枚举0~9的所有排列?没这个必要。只需要枚举fghij就可以计算出abcde,然后判断是否所有数字都不相同即可。不仅程序简单,而且枚举量也从10!=3628800降低至不到1万,而且abcde和fghig加起来超过10位时可以终止枚举。由此可见,即使采用暴力枚举,也是需要认真分析问题的。
代码:
#include<iostream> #include<string> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include<stack> #include<map> #include<iomanip> #define ll long long using namespace std; const int maxn = 99999 + 5; bool solve(int s, int v){ int vis[10]; memset(vis, 0, sizeof(vis)); int a = 0, b = 0, c = 0, d = 0, e = 0,f = 0,g = 0,h = 0,i = 0,j = 0; e = s%10; s /= 10; j = v%10; v/=10; d = s%10; s /= 10; i = v%10; v/=10; c = s%10; s /= 10; h = v%10; v/=10; b = s%10; s /= 10; g = v%10; v/=10; a = s%10; f = v%10; vis[a]++;vis[b]++;vis[c]++;vis[d]++;vis[e]++;vis[f]++;vis[g]++;vis[h]++;vis[i]++;vis[j]++; bool kk = true; for(int i = 0; i < 10; i++) if(vis[i] != 1) { kk = false; break; } if(kk) return true; else return false; } int main() { int n, caset = 0; while(1) { scanf("%d",&n); if(n == 0) break; if(caset++) cout << endl; bool f = false; for(int i = 1023;i < maxn; i++) { int sum = i*n; if(sum > maxn) break; if(solve(sum, i)) { printf("%05d / %05d = %d\n", sum, i, n); f = true; } } if(!f) printf("There are no solutions for %d.\n", n); } return 0; }
相关文章推荐
- uva 725 Division(除法)暴力法!
- 除法(division,UVa 725)
- 例题7-1 除法(Division, UVa 725)
- 除法(Division, UVa 725)
- 除法(Division ,UVA 725)-ACM集训
- UVa 725 Division(除法)
- 除法(Division ,UVA 725)-ACM集训
- 除法(Division,UVa 725)
- 除法(Division, UVa 725)
- 7-1 除法(Division,UVa 725)
- UVA-725除法-Division
- 除法(Division,UVa 725)
- UVA 725 Division 除法
- 除法(Division UVa 725)
- 除法(Division, UVa 725)
- UVa 725 Division(除法)
- 除法(Division,UVa 725)
- Uva725 Division【dfs枚举】【例题7-1】
- uva725 除法(第七章)