演算法競賽入門經典(第二版)第三章陣列和字串中競賽題目例題3-4猜數字
阿新 • • 發佈:2018-11-04
實現一個經典猜數字遊戲。給定答案序列和使用者猜的序列,統計有多少數字位置正確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;
}