下面先附上我的水货代码,,,,一会附上,,,刘大婶给的代码///////3ms
#include<stdio.h> #include<string.h> int main() { int A,B,W=0,t,n,m,i,j,q,a[1111],b[1111],c[1111]; while(scanf("%d",&t),t) { W++; printf("Game %d: ",W); for(A=B=i=0;i<t;i++) { scanf("%d",&a[i]); } for(;;) { for(A=B=i=0;i<t;i++) { scanf("%d",&b[i]); } for(i=0;i<t;i++) c[i]=a[i]; //strcpy(c,a); for(q=i=0;i<t;i++) { if(b[i]==0) q++; } if(q==t) break; for(i=0;i<t;i++) { if(a[i]==b[i]) A++; //这个是序号能对应上的 个数.... } for(i=0;i<t;i++) //原版是a[i].c[i]是原版的复制品...b[i]是猜测的 { for(j=0;j<t;j++) { if(c[i]==b[j]) { c[i]=b[j]=-741258; B++; break; } } } printf(" (%d,%d) ",A,B-A); } } }
下面附上刘大婶的代码...相对来说人家的 又简单,时间复杂度又低
#include<stdio.h> #define maxn 1010 int main() { int A,B,i,n,d,a[maxn],b[maxn]; int kase=0; while(scanf("%d",&n),n) { printf("Game %d: ",++kase); for(i=0;i<n;i++) // 这是需要猜的数组. scanf("%d",&a[i]); for(;;) //汗, 这里和大婶想的挺像的. { A=B=0; for(i=0;i<n;i++) //这是 你猜的数组 { scanf("%d",&b[i]); if(a[i]==b[i]) //在输入的时候就顺便得到了对应位置相同的 数字. A++; } if(b[0]==0)// 英文题目上已经说过. break; for(d=1;d<=9;d++) { int c1=0,c2=0; // for(i=0;i<n;i++) { if(a[i]==d) //统计一下 需要被猜的数组里面 1的个数 c1++; if(b[i]==d) //统计一下 猜测数列里1的个数. c2++; } if(c1<c2) //然后将 相同的 加起来 { B=B+c1; } else { B=B+c2; } } printf(" (%d,%d) ",A,B-A); } } return 0; }