标签:
链接:http://acm.hust.edu.cn/vjudge/problem/35442
题意:
输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2≤n≤79。
分析:
枚举fghij算出abcde,然后判断是否所有数字都不相同,当abcde和fghij加起来超过10位时终止枚举。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 int n; 7 8 int main() { 9 int kase = 0; 10 char buf[99]; 11 while (scanf("%d", &n) == 1 && n) { 12 if (kase++) putchar(‘\n‘); 13 int cnt = 0; 14 for (int fghij = 1234; ; fghij++) { 15 int abcde = fghij * n; 16 sprintf(buf, "%05d%05d", abcde, fghij); 17 if (strlen(buf) > 10) break; 18 sort(buf, buf + 10); 19 bool ok = true; 20 for (int i = 0; i < 10; i++) 21 if (buf[i] != ‘0‘ + i) ok = false; 22 if (ok) { 23 cnt++; 24 printf("%05d / %05d = %d\n", abcde, fghij, n); 25 } 26 } 27 if (!cnt) printf("There are no solutions for %d.\n", n); 28 } 29 return 0; 30 }
标签:
原文地址:http://www.cnblogs.com/XieWeida/p/5800267.html