2 条题解
-
2
俗话说得好,暴力出奇迹。
#include <bits/stdc++.h> using namespace std; bool com(char a, char b) { return a > b; } char ans[11]="9876543210", s[11]; int main() { int n, pro, m = 0; bool flag = false; while (scanf("%d", &n) != EOF && n) { if (m > 0) cout << endl; m++;//输出技巧 flag = false; for (int i = 1234; i <= 50000; i++) { pro = n * i; if (pro > 98765) break; if (i < 10000) sprintf(s, "%d%d%d", 0, i, pro); else sprintf(s, "%d%d", i, pro); sort(s, s + 10, com); if (strcmp(s, ans) == 0) { printf("%d / %05d = %d\n", pro, i, n); flag = true; } } if (!flag) printf("There are no solutions for %d.\n", n); } return 0; }
-
-1
这次暴力还真出奇迹了……
60分dfs做法:
#include <bits/stdc++.h> using namespace std; int n , num[15] , book[15]; bool flag = false; void dfs(int step) { if (step == 11) { int a = num[1] * 10000 + num[2] * 1000 + num[3] * 100 + num[4] * 10 + num[5]; int b = num[6] * 10000 + num[7] * 1000 + num[8] * 100 + num[9] * 10 + num[10]; if (a / b == n && a % b == 0) { flag = true; printf("%d%d%d%d%d / %d%d%d%d%d = %d\n" , num[1] , num[2] , num[3] , num[4] , num[5] , num[6] , num[7] , num[8] , num[9] , num[10] , n); return; } } for (int i = 0 ; i <= 9 ; i++) { if (book[i] == 0) { num[step] = i; book[i] = 1; dfs(step + 1); book[i] = 0; } } return; } int main() { cin >> n; while (n) { memset(book , 0 , sizeof(book)); flag = false; dfs(1); if (!flag) printf("There are no solutions for %d.\n" , n); printf("\n"); cin >> n; } return 0; }
- 1
信息
- ID
- 1916
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 121
- 已通过
- 67
- 上传者