1. 程式人生 > >演算法競賽入門經典(第二版)第三章陣列和字串中競賽題目例題3-4猜數字

演算法競賽入門經典(第二版)第三章陣列和字串中競賽題目例題3-4猜數字

實現一個經典猜數字遊戲。給定答案序列和使用者猜的序列,統計有多少數字位置正確A,有多少數字在兩個序列都出現過但位置不對B

  • 輸入包含多組資料。每組第一行為序列長度為n,第二行是答案序列,接下來是若干猜測序列。猜測序列全0時該組資料結束。n=0時輸入結束
    [分析]
    直接統計可得A,為了求B對於每個數字,統計二者出現的次數c1和c2,則min(c1,c2)就是該數字對B的貢獻最後要減去A的部分。
#include<stdio.h>
#define maxn 1010
int main()
{
    int n,a[maxn],b[maxn];
    int kase=
0; while(scanf("%d",&n)==1&&n) { printf("Game%d:\n",++kase); for(int i=0;i<n;i++)scanf("%d",&a[i]); for(;;) { int A=0,B=0; for(int i=0;i<n;i++) { scanf("%d",&b[i]); if(a[i]
==b[i])A++; } if(b[0]==0)break; for(int d=1;d<=9;d++)//一一對應後統計數字d在答案序列和猜測序列中個出現多少次 { int c1=0,c2=0; for(int i=0;i<n;i++) { if(a[i]==d) c1++; if(b[i]==d) c2++; }
if(c1<c2) B+=c1;else B+=c2; } printf("(%d,%d)\n",A,B-A); } } return 0; }