UVA - 340 Master-Mind Hints

来源:互联网 发布:ubuntu优麒麟安装 编辑:程序博客网 时间:2024/05/29 11:13

题目大意:找出同列中相同的数字和不同列中相同的数字有多少

解题思路:用三个变量存储,一个存储相同列数字相同的,一个存储答案出现的数字的个数,一个存储猜的个数

#include<cstdio>#include<cstring>int main() {int number;int ans[1000];int guess[1000];int count = 1;while(scanf("%d", &number) != EOF && number) { printf("Game %d:\n", count++);  for(int i = 0; i < number; i++)scanf("%d", &(ans[i]));int temp[1000];temp[0] = ans[0];int j;int num = 1;for(int i = 1; i < number; i++) {for( j = i - 1; j >= 0; j--)if(ans[i] == ans[j])break;if(j == -1) {temp[num] = ans[i];num++;}}//将ans中不重复的数字存储在temp中while(1){int mark_b = 0;//退出时累计零for(int i = 0; i < number; i++) {scanf("%d",&(guess[i]));if(guess[i] == 0)mark_b++;}if(mark_b == number)break;int B = 0; int A = 0;for(int i = 0; i < number; i++)if(guess[i] == ans[i])A++;//printf("num is %d\n", num);for(int i = 0; i < num; i++) {int c1 = 0, c2 = 0, a = 0;int mark = 0;for(int k = 0; k < number; k++) {//找寻是否存在相等的数if(temp[i] == guess[k]) {mark = 1;for(int l = k; l < number; l++)if(guess[l] == temp[i])//计算guess中有几个重复的数字c1++;//printf("c1 is %d\n", c1);}if(mark == 1) {for(int l = 0; l < number; l++) {if(ans[l] == guess[l] && ans[l] == temp[i] && guess[l] == temp[i])//错误a++;if(ans[l] == temp[i])//统计c2++;}//printf("a is %d\n c2 is %d\n", a, c2);int min;min = c1 > c2 ? c2:c1;B = B + min - a;break;//查找下一个数}}}printf("    (%d,%d)\n", A, B);  }//do}//whilereturn 0;}


0 0
原创粉丝点击