UVA 340

来源:互联网 发布:mysql 时间戳 编辑:程序博客网 时间:2024/05/16 11:08

题目大意:判断与第一行对比。竖下来的同位置上相同的数有几个,除去相同的数,剩下的数有有几个一一对应相等。

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

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; } 
原创粉丝点击