PAT 1059 c語言競賽(測試點2未過,已通過)

題目鏈接請點擊
思路:定義整型數組rank,其下標大小對應排名順序(下標+1=排名),裏面存儲參賽者ID;定義整型數組iChecked與數組rank相對應,初始值爲0,若已領取過獎品則置1;定義int變量cnt(初值0)用於判斷此ID是否存在。對於每個待查詢ID,循環遍歷rank數組,若有與之相等表明此ID存在,cnt=1,根據題目要求,判斷是冠軍或素數或其他,按要求輸出即可。
測試點2:起初測試點未過,是因爲判斷素數出了問題(源代碼如下)主要在於圖中標黃部分,這裏應該是ii<=num。例如:33=9,9不是素數,但若按下圖代碼,則會把3跳過,從而認爲9是素數。
在這裏插入圖片描述
AC代碼:

#include<iostream>
using namespace std;
bool isPrime(int num){//判斷是否是素數
	if(num==1) return false;//1不是素數(此題1是冠軍,判斷與否影響不大)
	for(int i=2;i*i<=num;i++){
		if(num%i==0) return false;//若整除=>非素數
	}
	return true;
} 
int main(){
	int N,K;//N參賽者人數 K個待查詢ID 
	cin>>N;
	int rank[N],isChecked[N]={0};//rank下標對應排名,存儲ID isChecked若0表示未領取 
	for(int i=0;i<N;i++) cin>>rank[i];
	cin>>K;
	for(int i=0;i<K;i++){
		int id,cnt=0;//cnt=1此ID存在 
		cin>>id;
		printf("%04d: ",id);//控制格式 輸出前導0 
		for(int j=0;j<N;j++){
			if(id==rank[j]){ 
				cnt=1;
				if(isChecked[j]==1){//已領取獎品
					isChecked[j]=1; cout<<"Checked"<<endl; break;
				} else if(j==0){//冠軍
					isChecked[j]=1; cout<<"Mystery Award"<<endl; break;
				} else if(isPrime(j+1)){//排名是素數 
					isChecked[j]=1; cout<<"Minion"<<endl; break;
				} else{
					isChecked[j]=1; cout<<"Chocolate"<<endl; break;
				}
			}
		}
		if(cnt==0) cout<<"Are you kidding?"<<endl;
	}
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章