USACO crypt1
题意:给出1~9里面的一些数字,按题目所给公式填入这些数字使得结果成立,求有多少种组合方式。
mark:简单的枚举。我的代码比较暴力,可以用数组的形式简化。。。
代码:
/* ID: andre_j2 LANG: C TASK: crypt1 */ #include <stdio.h> #include <stdlib.h> #include <string.h> int n; int a[15]; int tem1,tem2,tem3,cnt; int find(int m) { int i; for(i = 0; i < n; i++) if(a[i] == m) return 1; return 0; } int fun(int x, int y) { int i,j,k; i = tem1*x; j = tem1*y; k = i*10+j; if(i >= 1000 || j >= 1000 || k >= 10000) return 0; while(i) { if(!find(i%10)) return 0; i /= 10; } while(j) { if(!find(j%10)) return 0; j /= 10; } while(k) { if(!find(k%10)) return 0; k /= 10; } return 1; } main() { freopen("crypt1.in", "r", stdin); freopen("crypt1.out", "w", stdout); int i,j,k,p,q; scanf("%d", &n); cnt = 0; for(i = 0; i < n; i++) scanf("%d", a+i); for(i = 0; i < n; i++) for(j = 0; j < n; j++) for(k = 0; k < n; k++) { tem1 = a[i]*100+a[j]*10+a[k]; for(p = 0; p < n; p++) for(q = 0; q < n; q++) if(fun(a[p], a[q])) cnt++; } printf("%d\n", cnt); exit(0); }