PAT_B_1059_C語言競賽

題目描述:數組

C 語言競賽是浙江大學計算機學院主持的一個歡樂的競賽。既然競賽主旨是爲了好玩,頒獎規則也就制定得很滑稽:

0、冠軍將贏得一份「神祕大獎」(好比很巨大的一本學生研究論文集……)。
一、排名爲素數的學生將贏得最好的獎品 —— 小黃人玩偶!
二、其餘人將獲得巧克力。
給定比賽的最終排名以及一系列參賽者的 ID,你要給出這些參賽者應該得到的獎品。

輸入格式:
輸入第一行給出一個正整數 N(≤10000​​ ),是參賽者人數。隨後 N 行給出最終排名,每行按排名順序給出一位參賽者的 ID(4 位數字組成)。接下來給出一個正整數 K 以及 K 個須要查詢的 ID。

輸出格式:
對每一個要查詢的 ID,在一行中輸出 ID: 獎品,其中獎品或者是 Mystery Award(神祕大獎)、或者是 Minion(小黃人)、或者是 Chocolate(巧克力)。若是所查 ID 根本不在排名裏,打印 Are you kidding?(耍我呢?)。若是該 ID 已經查過了(即獎品已經領過了),打印 ID: Checked(不能多吃多佔)。

輸入樣例:
6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222
輸出樣例:
8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?

解答關鍵:spa

// 關鍵點:控制數字的格式化輸出 
// 如將整數1按照格式 0001輸出
// 則採用下面的輸出格式控制,比較簡單,沒必要用字符串控制輸出
printf("%04d\n",val);

 本人AC代碼:blog

下述代碼改進方法:字符串

	// int Class[Max] = {0}; // 5表明特等獎,3表明小黃人,1表明巧克力 
	// 對每個數字判斷是否爲素數,冗餘量較高,則在領獎時對相應的序號判斷便可 
	int prime = 0; // 設置參數表示該位置是否爲素數 
//1059 C語言競賽
// 關鍵點:控制數字的格式化輸出 
# include <stdio.h>
# include <math.h>
# define Max 10001
int Prime(int );
int main(void)
{
	int Num[Max];
	int flag[Max] = {0};  // -1 表明領過獎了 
	int Class[Max] = {0}; // 5表明特等獎,3表明小黃人,1表明巧克力 
	int len1, len2, i, j, N, val;
	int temp = 0; // 設置參數,temp=0,表明沒有找到,temp=1,表明找到 
	
	scanf("%d",&N);
	len1 = N;
	for (i=1; i<=len1; i++)
	{
		scanf("%d",&Num[i]);
		if (1 == Prime(i))
			Class[i] = 3;
		else
			Class[i] = 1;
	}
	Class[1] = 5;

	scanf("%d",&N);
	len2 = N;
	for (i=1; i<=len2; i++)
	{
		temp = 0;
		scanf("%d",&val); 
		// 在Num[]數組中遍歷查找val
		for (j=1; j<=len1; j++)
		{
			if (Num[j] == val)
			{
				temp = 1; // 設置標誌位爲1,表示找到了 
				break; 
			}
		}
		// 若是找到,則比較是否領過獎品 
		if(1 == temp) 
		{
			// 領過獎品
			if (-1 == flag[j])
			{
				printf("%04d: Checked\n",val);
			 }
			 // 沒有領過 
			 else if (0 == flag[j])
			 {
			 	if (5 == Class[j]) 
			 	{
			 		printf("%04d: Mystery Award\n",val);
				 }
				 else if (3 == Class[j])
				 {
				 	printf("%04d: Minion\n",val);
				 }
				 else if (1 == Class[j])
				 {
				 	printf("%04d: Chocolate\n",val);
				 }
			 	// 領過獎以後設置標誌位爲-1 
			 	flag[j] = -1;
			 }
			
		 } 
		// 不然,輸出Are you kidding? 
		else
		{
			printf("%04d: Are you kidding?\n",val);
		}
	}
	return 0;
}

int Prime(int n)
{
	int i = 2;
	
	for (i; i<=sqrt(n); i++)
	{
		if (n%i == 0)
			return 0;
	}
	return 1;
} 
相關文章
相關標籤/搜索