日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

1059 C语言竞赛(PAT乙级 C++)

發布時間:2023/12/2 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1059 C语言竞赛(PAT乙级 C++) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

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

  • 0、冠軍將贏得一份“神秘大獎”(比如很巨大的一本學生研究論文集……)。
  • 1、排名為素數的學生將贏得最好的獎品 —— 小黃人玩偶!
  • 2、其他人將得到巧克力。

給定比賽的最終排名以及一系列參賽者的 ID,你要給出這些參賽者應該獲得的獎品。

輸入格式:

輸入第一行給出一個正整數 N(≤10?4?? ),是參賽者人數。隨后 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?

分析

  • 直觀方法:就是使用結構體存參賽者的信息,包括id、名次(應得獎項)、是否領過獎。然后遍歷輸出。但這種情況很可能超時。
  • 改進思路:超時在于多次重復訪問不必要的結構體變量,改進方法是把id作為結構體數組的下標。而id是固定的4位數字(0000-9999),只需把字符串類型轉為對應的數即可(使用ASCII碼)。查詢的時候只需要把待查詢id轉為數字再輸出相應信息即可。
  • 例如0000轉為0,0001轉為1.

AC代碼

第一版

#include<iostream> #include<string> #include<cmath> using namespace std; struct Player {int id,award,status; };int main() {bool is_prime(int i);Player p[10000];int i,k,n,temp=0;string id;cin>>n;for(i=0; i<10000; i++){p[i].award=-1;p[i].status=0;}for(i=1; i<=n; i++){cin>>id;temp=(id[0]-'0')*1000+(id[1]-'0')*100+(id[2]-'0')*10+id[3]-'0';if(i==1)p[temp].award=0;else if(is_prime(i)==true){p[temp].award=1;}else{p[temp].award=2;}p[temp].id=temp;}cin>>k;for(i=0; i<k; i++){cin>>id;temp=(id[0]-'0')*1000+(id[1]-'0')*100+(id[2]-'0')*10+id[3]-'0';if(p[temp].status==1){cout<<id<<": Checked"<<endl;continue;}if(p[temp].award==0)cout<<id<<": Mystery Award";else if(p[temp].award==1)cout<<id<<": Minion";else if(p[temp].award==2)cout<<id<<": Chocolate";else{cout<<id<<": Are you kidding?"<<endl;continue; }p[temp].status=1;cout<<endl;}return 0; } bool is_prime(int n) {if(n==2||n==3) return true;int temp=ceil(sqrt((double)n));for(int i=2; i<=temp; i++){if(n%i==0) return false;}return true; }

第二版(去掉id)

#include<iostream> #include<string> #include<cmath> using namespace std; struct Player {int award,status; };int main() {bool is_prime(int i);Player p[10000];int i,k,n,temp=0;string id;cin>>n;for(i=0; i<10000; i++){p[i].award=-1;p[i].status=0;}for(i=1; i<=n; i++){cin>>id;temp=(id[0]-'0')*1000+(id[1]-'0')*100+(id[2]-'0')*10+id[3]-'0';if(i==1)p[temp].award=0;else if(is_prime(i)==true){p[temp].award=1;}else{p[temp].award=2;}}cin>>k;for(i=0; i<k; i++){cin>>id;temp=(id[0]-'0')*1000+(id[1]-'0')*100+(id[2]-'0')*10+id[3]-'0';if(p[temp].status==1){cout<<id<<": Checked"<<endl;continue;}if(p[temp].award==0)cout<<id<<": Mystery Award";else if(p[temp].award==1)cout<<id<<": Minion";else if(p[temp].award==2)cout<<id<<": Chocolate";else{cout<<id<<": Are you kidding?"<<endl;continue; }p[temp].status=1;cout<<endl;}return 0; } bool is_prime(int n) {if(n==2||n==3) return true;int temp=ceil(sqrt((double)n));for(int i=2; i<=temp; i++){if(n%i==0) return false;}return true; }

更多題解
PAT 乙級(Basic Level) 題解匯總(持續更新)(C++)

總結

以上是生活随笔為你收集整理的1059 C语言竞赛(PAT乙级 C++)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。