例题3-4 猜数字游戏的提示 UVa340
感悟。
1、自认为这个程序写得还可以。
2、开始阶段一团浆糊,只能从数据的输入输出入手,先整理好输入输出格式。
3、进行输入输出测试阶段,输入太繁琐,果断改成采用文件的方式(FILE *fin)输入数据,测试成功,提交时,再改成标准输入。
4、程序是每当输出结果不符要求,调试,输出结果还不符要求,继续调试,一步一步弄出来的。
5、《啊哈!算法》设置标签(book[1000+10])的算法深入骨髓。
6、不断修改代码的过程中,还能保持一颗平常心,不骄不糙,心性的修炼又上了一个台阶。
7、抽空按原书代码方式敲了一遍,发现原书的输出格式比想象的要简单太多,这样的输出格式,照样AC。
4
Game 1:
1 3 5 5
1 1 2 3
(1,1)
4 3 3 5
(2,0)
6 5 5 1
(1,2)
6 1 3 5
(1,2)
1 3 5 5
(4,0)
0 0 0 0
10
Game 2:
1 2 2 2 4 5 6 6 6 9
1 2 3 4 5 6 7 8 9 1
(2,4)
附上代码:
环境Dev-cpp4.9.9.2
#include <stdio.h>
#include <string.h>
int a[1000+10];//答案序列
int b[1000+10];//猜测序列
int ab[1000+10];//a数组对应标签
int bb[1000+10];//b数组对应标签
int lcount[1000+10];//统计数字位置正确
int rcount[1000+10];//统计位置不对的数字
int main(){
int n;
int i;
int sum;
int count;
int game=0;
int j;
while(scanf("%d",&n)==1&&n){
game++;
count=0;//序列个数
memset(lcount,0,sizeof(lcount));//初始化为0
memset(rcount,0,sizeof(rcount));//初始化为0
for(i=0;i<n;i++){//答案序列
scanf("%d",&a[i]);
}
while(1){
sum=0;
memset(ab,0,sizeof(ab));//每行输入时,标记初始化
memset(bb,0,sizeof(bb));//每行输入时,标记初始化
for(i=0;i<n;i++){//lcount;
scanf("%d",&b[i]);
if(ab[i]==0&&bb[i]==0&&a[i]==b[i]){//位置对应数字处理,同时标记为1
ab[i]=1;
bb[i]=1;
lcount[count]++;
}
sum+=b[i];
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(ab[i]==0&&bb[j]==0&&a[i]==b[j]){//位置不对应数字处理,同时标记为1
bb[j]=2;
rcount[count]++;
break;//找到相同数字,立即跳出,进入下一个数字的查找。
}
}
}
if(sum==0)//跳出序列输入
break;
count++;
}
printf("Game %d:\n",game);//打印
for(i=0;i<count;i++)
printf(" (%d,%d)\n",lcount[i],rcount[i]);
}
return 0;
}