猜數字遊戲的提示(UVa 340)

猜數字遊戲的提示(UVa 340)

實現一個經典的“猜數字”遊戲。

給定答案序列和用戶猜的序列,統計有多少數字位置正確(A),有多少數字在兩個序列都出現過但位置不對(B)。


輸入包含多組數據。

每組輸入第一行爲序列長度 n,第二行是答案序列,接下來若干行猜測序列。猜測序列全0 時該組數據結束。 n=0時輸入結束。



樣例輸入: 

4

1 3 5 5

1 1 2 3

4 3 3 5

6 5 5 1

6 1 3 5

1 3 5 5

0 0 0 0

10

1 2 2 2 4 5 6 6 6 9

1 2 3 4 5 6 7 8 9 1

1 1 2 2 3 3 4 4 5 5

1 2 1 3 1 5 1 6 1 9

1 2 2 5 5 5 6 6 6 7

0 0 0 0 0 0 0 0 0 0

0


樣例輸出:

Game 1:

   (1,1)

   (2,0)

   (1,2)

   (1,2)

   (4,0)

Game 2:

   (2,4)

   (3,2)

   (5,0)

   (7,0)


注:(1,1)開始前面空四格。


代碼如下:


#include <stdio.h>
#include <string.h>
long long a[10500],b[1050][10500];
int main(int argc, char *argv[])
{
	long long n,l=1;
	while((scanf("%lld",&n))!=EOF&&n)
	{
		printf("Game %d:\n",l);
		memset(a,0,sizeof(a));
		long long i;
		for(i=0;i<n;i++)
		scanf("%lld",&a[i]);
		for(i=0;;i++)
		{
			long long s=0,j,A=0,B=0,up[11]={0},down[11]={0};
			memset(b[i],0,sizeof(b[i]));
			for(j=0;j<n;j++)
			{
				scanf("%lld",&b[i][j]);
				if(b[i][j]==0)s++;
				if(b[i][j]==a[j])A++;
				else {
					 
					up[a[j]]++;
					down[b[i][j]]++;
				}
			}
			if(s==n)break;
			for(j=1;j<10;j++)
			{
				if(up[j]<=down[j])B+=up[j];
				else B+=down[j];
			}
			printf("    (%lld,%lld)\n",A,B);
			
		}
		l++;
	}
	return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章