您的位置:首页 > 其它

UVA 340 - Master-Mind Hints

2017-09-01 19:52 453 查看
题目大意:判断与第一行对比。竖下来的同位置上相同的数有几个,除去相同的数,剩下的数有有几个一一对应相等。

解题思路:同位置相同的数直接循环判断。剩下的数扔到另外的数组,并排序,两个循环判断。如果第一行剩下来的数比下行剩下来的数大,之后的里面的循环下标变大,相等时,里面的循环下标也变大。否则会出现重复计算,就不是一一对应了。

ac代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n, a[2][1005], b[2][1005];
int temp1, temp2, len, k, count=1;
while (scanf("%d", &n)!=EOF && n){
printf("Game %d:\n", count);
for (int i=0; i<n; i++)
scanf("%d", &a[0][i]);
while (scanf("%d", &a[1][0])){
temp1 = temp2 = len = k = 0;
for (int i=1; i<n; i++)
scanf("%d", &a[1][i]);
if (a[1][0] == 0)
break;
for (int i=0, j=0; i<n; i++)
if (a[0][i] == a[1][i])
temp1++;
else{
b[0][j] = a[0][i];
b[1][j++] = a[1][i];
len++;
}
sort(b[0], b[0]+len);
sort(b[1], b[1]+len);
for (int i=0; i<len; i++)
for (int j=k; j<len; j++){
if (b[0][i] > b[1][j])
k = j+1;
else if (b[0][i] == b[1][j]){
temp2++;
k = j+1;
break;
}
else break;
}
printf("    (%d,%d)\n", temp1, temp2);
}
count++;
}
return 0;
 } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: