uva450-sorting&searching

来源:互联网 发布:手机看病软件 编辑:程序博客网 时间:2024/05/18 00:31

真是好久没怎么解题,脑袋都秀逗了。。

这个是个比较有意思的题目,以前文曲星里面有这种游戏“猜数字”

一个人出一定数目的数字,比如说1 2 3 4 5

另外一个人猜,知道他不想猜了。

对于每组猜的数字,输出完全猜对的个数和只是数字正确而位置错误的数字。

比如猜1 3 6 7 8

就输出1,1

源码

#define LOCAL#include <stdio.h>#include <string.h>#define MAXN 1000 + 10int number[MAXN];int guessNumber[MAXN];int flags[MAXN];int amount[10];void match(int n);int main(){#ifdef LOCALfreopen("input.txt", "r", stdin);//freopen("output.txt", "w", stdout);#endifint n;int flag;int t = 0;while(scanf("%d", &n) != EOF && n != 0){// 数据初始化memset(number, 0, sizeof(number));memset(guessNumber, 0, sizeof(guessNumber));flag = false;// 数据输入 printf("Game %d:\n", ++t);for(int i = 0;i < n; i++){scanf("%d", &number[i]); //printf("%d", number[i]);}//printf("\n");while(true){flag = true;for(int i = 0;i < n; i++){scanf("%d", &guessNumber[i]);//printf("%d", guessNumber[i]);if(guessNumber[i] != 0){flag = false;}}//printf("\n");if(flag == true){break;}// 算法主体match(n);}}return 0;}void match(int n){memset(flags, 0, sizeof(flags));memset(amount, 0, sizeof(amount));int r = 0;int s = 0;for(int i = 0; i < n; i++){if(number[i] == guessNumber[i]){r++;flags[i] = true;}else{amount[number[i]]++;}}for(int i = 0; i < n; i++){if(flags[i] == false)// 猜测的数字未被使用 {if(amount[guessNumber[i]] > 0){s++;amount[guessNumber[i]]--;}}}printf("    (%d,%d)\n", r, s);}