Master-Mind Hints - UVa 340
阿新 • • 發佈:2019-01-11
Master-Mind Hints - Uva 340
https://vjudge.net/problem/UVA-340
思路:
- 直接統計A,因為A比較容易統計,相比之下B不容易統計,故要在B上使用一些技巧。
- 分別統計答案序列與猜測序列中各個數字出現的次數,分別記為c1,c2,選擇c1,c2中較小的數,把它給B,直到1~9之間的數字都統計完畢,最後B = B - A,那麼,問題來了,為什麼這樣減呢?
- 原因是:題目中說B為在兩個序列均出現過但位置不同,故應該選擇在兩個序列出現次數的最小值,而不是最大值,最小值才說明在某個序列中出現次數最少為多少。
程式碼如下:
#include<stdio.h> #define MAX 1001 int main() { int n, t = 0; while(scanf("%d",&n) && n != 0) { int i; int a[MAX], b[MAX]; for(i = 0; i < n; i++) scanf("%d",&a[i]); printf("Game %d:\n",++t); int flag = 0; while(flag == 0) { int A = 0, B = 0; for(i = 0; i < n; i++) { scanf("%d",&b[i]); if(a[i] == b[i]) A++; if(b[i] == 0) flag = 1; } if(flag == 1) break; int d; for(d = 1; d <= 9; d++) { int c1 = 0, c2 = 0; for(i = 0; i < n; i++) { if(d == a[i]) c1++; if(d == b[i]) c2++; } if(c1 < c2) B += c1; else B += c2; } printf(" (%d,%d)\n",A, B-A); } } }