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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

PAT : PAT (Basic Level) Practice(中文)答案(1001 ~ 1095)(纯C编写)

發(fā)布時(shí)間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT : PAT (Basic Level) Practice(中文)答案(1001 ~ 1095)(纯C编写) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目集地址

報(bào)名了12月的PAT-B,先試試水。

已完成:2018/10/22 — 2018/11/14?


更新:(2018/12/09)PAT乙級(jí)考試100分!

考試代碼已更新

冬天坐火車(chē)跑去考試凍懵了,來(lái)年對(duì)戰(zhàn)PAT甲級(jí)考試!


目錄

目錄

題目集地址

目錄

1001害死人不償命的(3n+1)猜想

1002寫(xiě)出這個(gè)數(shù)

1003我要通過(guò)!

1004成績(jī)排名

1005繼續(xù)(3n+1)猜想

1006換個(gè)格式輸出整數(shù)

1007素?cái)?shù)對(duì)猜想

1008數(shù)組元素循環(huán)右移問(wèn)題

1009說(shuō)反話

1010一元多項(xiàng)式求導(dǎo)

1011A+B 和 C

1012數(shù)字分類(lèi)

1013數(shù)素?cái)?shù)

1014福爾摩斯的約會(huì)

1015德才論

1016部分A+B

1017A除以B

1018錘子剪刀布

1019數(shù)字黑洞

1020月餅

1021個(gè)位數(shù)統(tǒng)計(jì)

1022D進(jìn)制的A+B

1023組個(gè)最小數(shù)

1024科學(xué)計(jì)數(shù)法

1025反轉(zhuǎn)鏈表

1026程序運(yùn)行時(shí)間

1027打印沙漏

1028人口普查

1029舊鍵盤(pán)

1030完美數(shù)列

1031查驗(yàn)身份證

1032挖掘機(jī)技術(shù)哪家強(qiáng)

1033舊鍵盤(pán)打字

1034有理數(shù)四則運(yùn)算

1035插入與歸并

1036跟奧巴馬一起編程

1037在霍格沃茨找零錢(qián)

1038統(tǒng)計(jì)同成績(jī)學(xué)生

1039到底買(mǎi)不買(mǎi)

1040有幾個(gè)PAT

1041考試座位號(hào)

1042字符統(tǒng)計(jì)

1043輸出PATest

1044火星數(shù)字

1045快速排序

1046劃拳

1047編程團(tuán)體賽

1048數(shù)字加密

1049數(shù)列的片段和

1050螺旋矩陣

1051復(fù)數(shù)乘法

1052賣(mài)個(gè)萌

1053住房空置率

1054求平均值

1055集體照

1056組合數(shù)的和

1057數(shù)零壹

1058選擇題

1059C語(yǔ)言競(jìng)賽

1060愛(ài)丁頓數(shù)

1061判斷題

1062最簡(jiǎn)分?jǐn)?shù)

1063計(jì)算譜半徑

1064朋友數(shù)

1065單身狗

1066圖像過(guò)濾

1067試密碼

1068萬(wàn)綠叢中一點(diǎn)紅

1069微博轉(zhuǎn)發(fā)抽獎(jiǎng)

1070結(jié)繩

1071小賭怡情

1072開(kāi)學(xué)寄語(yǔ)

1073多選題常見(jiàn)計(jì)分法

1074宇宙無(wú)敵加法器

1075鏈表元素分類(lèi)

1076Wifi密碼

1077互評(píng)成績(jī)計(jì)算

1078字符串壓縮與解壓

1079延遲的回文數(shù)

1080MOOC期終成績(jī)

1081檢查密碼

1082射擊比賽

1083是否存在相等的差

1084外觀數(shù)列

1085PAT單位排行

1086就不告訴你

1087有多少不同的值

1088三人行

1089狼人殺-簡(jiǎn)單版

1090危險(xiǎn)品裝箱

>>以下5題為2018/12/09PAT參賽時(shí)所寫(xiě)

1091N-自守?cái)?shù)

1092最好吃的月餅

1093字符串A+B

1094谷歌的招聘

1095解碼PAT準(zhǔn)考證

END


1001害死人不償命的(3n+1)猜想

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int num;scanf("%d",&num);int cnt=0;while(num!=1){cnt++;if(num%2)num=(3*num+1)/2;elsenum=num/2;}printf("%d\n",cnt);return EXIT_SUCCESS; }

so so so so easy。


1002寫(xiě)出這個(gè)數(shù)

#include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc,char **argv) {char* bignumber=(char*)calloc(105,sizeof(char));scanf("%s",bignumber);int sum=0;for(int i=0;i<strlen(bignumber);i++)sum+=bignumber[i]-'0';char sp[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};int list[105]={0},index=0;do{int now=sum%10;sum/=10;list[index++]=now;}while(sum);for(int i=index-1;i>=0;i--)printf("%s%c",sp[list[i]],i==0?'\n':' ');return EXIT_SUCCESS; }

so so easy。


1003我要通過(guò)!

#include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc,char **argv) {int cnt;scanf("%d",&cnt);while(cnt--){char str[105];scanf("%s",str);int state=0,i,Afront=0,Amiddle=0,Alater=0;for(i=0;i<strlen(str);i++){if(str[i]!='P'&&str[i]!='A'&&str[i]!='T')break;if(str[i]=='P')if(state==0)state=1;elsebreak;if(str[i]=='A')if(state==1)state=2; else if(state==2)Amiddle++;else if(state==0)Afront++;elseAlater++;if(str[i]=='T')if(state==2)state=3;elsebreak;}while(Amiddle){Alater-=Afront;Amiddle--;}if(i<strlen(str)||state!=3||Afront!=Alater)printf("NO\n");elseprintf("YES\n");}return EXIT_SUCCESS; }

分析題目三個(gè)通過(guò)條件可知。字符串中不能出現(xiàn)P、A、T之外的字符;PT之間只有一個(gè)A時(shí)(PAT),前后可以加上相同個(gè)數(shù)的A;PT中每多一個(gè)A(>2),后面加上前面?zhèn)€數(shù)個(gè)A。

統(tǒng)計(jì)字符串中P、T前中后A的個(gè)數(shù)判斷即可。


1004成績(jī)排名

#include<stdio.h> #include<stdlib.h> struct student {char name[15];char IDnumber[15];int score; }; typedef struct student student; int main(int argc,char **argv) {int cnt;scanf("%d",&cnt);student max={"","",0},min={"","",100};while(cnt--){student new;scanf("%s%s%d",new.name,new.IDnumber,&new.score);if(new.score>max.score)max=new;if(new.score<min.score)min=new;}printf("%s %s\n",max.name,max.IDnumber);printf("%s %s\n",min.name,min.IDnumber);return EXIT_SUCCESS; }

so so easy。


1005繼續(xù)(3n+1)猜想

#include<stdio.h> #include<stdlib.h> int book[4500]={0}; void getsp(int num) {if(book[num])return;while(num!=1){if(num%2)num=(3*num+1)/2;elsenum=num/2;book[num]=1;} } int main(int argc,char **argv) {int cnt;scanf("%d",&cnt);int num;int array[101]={0};while(cnt--){scanf("%d",&num);getsp(num);array[num]=1;}int firstblood=0;for(int i=100;i>0;i--)if(array[i]&&book[i]==0&&firstblood==0){printf("%d",i);firstblood=1;}else if(array[i]&&book[i]==0)printf(" %d",i);putchar('\n');return EXIT_SUCCESS; }

略坑。題目意思是第一個(gè)直接執(zhí)行3n+1猜想,并記錄過(guò)程中的每個(gè)數(shù),注意是過(guò)程數(shù);后面的每個(gè)數(shù)先判斷是否已經(jīng)記錄過(guò),記錄過(guò)就直接跳過(guò)(記錄過(guò)后面算就沒(méi)意義了),沒(méi)記錄過(guò)就執(zhí)行3n+1猜想并記錄過(guò)程數(shù)。

再挨個(gè)判斷每個(gè)數(shù)是否在記錄中,記錄中存在則輸出。記錄過(guò)程的數(shù)組開(kāi)大點(diǎn),4500左右。


1006換個(gè)格式輸出整數(shù)

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int num;scanf("%d",&num);int chundred=num/100;while(chundred--) putchar('B');num%=100;int cten=num/10;while(cten--) putchar('S');num%=10;int st=1;while(num>=st){putchar('0'+st);st++; }putchar('\n');return EXIT_SUCCESS; }

so so easy。


1007素?cái)?shù)對(duì)猜想

#include<stdio.h> #include<stdlib.h> #include<math.h> int getsp(int num) {int sum=0;int history=2;for(int k=2;k<=num;k++){int is=0;for(int i=2;i<=(int)sqrt(k);i++)if(k%i==0){is=1;break;}if(!is&&k-history==2)sum++;if(!is)history=k;}return sum; } int main(int argc,char **argv) {int num;scanf("%d",&num);printf("%d\n",getsp(num));return EXIT_SUCCESS; }

挨個(gè)計(jì)算素?cái)?shù),判斷當(dāng)前值和上一個(gè)歷史值之差是否為 2 。


1008數(shù)組元素循環(huán)右移問(wèn)題

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int num,rr;scanf("%d%d",&num,&rr);int array[105]={0};for(int i=1;i<=num;i++)scanf("%d",&array[i]);int begin=num-rr%num+1;for(int i=1;i<=num;i++){if(begin>num)begin=1;printf("%d%c",array[begin++],i==num?'\n':' ');}return EXIT_SUCCESS; }

模擬實(shí)現(xiàn)匯編的 RR 。


1009說(shuō)反話

#include<stdio.h> #include<string.h> char str[85]; int book[85][2]; int main(int argc,char** argv) {scanf("%[^\n]",str);int ind,ins=strlen(str),con=0,booknow=0;for(ind=0;ind<ins;ind++){if(str[ind]!=' '&&!con){con=1;book[booknow][0]=ind;}else if(str[ind]==' '&&con){con=0;book[booknow++][1]=ind;}}if(con)book[booknow++][1]=ins;for(ind=booknow-1;ind>=0;ind--){for(ins=book[ind][0];ins<book[ind][1];ins++)printf("%c",str[ins]);printf("%c",ind==0?'\n':' ');}return 0; }

記錄每個(gè)單詞的起始和終止位置。


1010一元多項(xiàng)式求導(dǎo)

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int sp[1005][2];int i=0;while(scanf("%d%d",&sp[i][0],&sp[i][1])!=EOF)i++;int firstblood=0;for(int j=0;j<=i-1;j++)if(sp[j][0]*sp[j][1]){if(firstblood==0)firstblood=1;elseputchar(' ');printf("%d %d",sp[j][0]*sp[j][1],sp[j][1]-1);}if(!firstblood)printf("0 0");putchar('\n');return EXIT_SUCCESS; }

小小小坑。存在負(fù)指數(shù)。


1011A+B 和 C

#include<stdio.h> #include<stdlib.h> #include<string.h> #define max(a,b) (a<b?b:a) #define min(a,b) (a>b?b:a) int main(int argc, char *argv[]) {int cnt;scanf("%d",&cnt);for(int i=1;i<=cnt;i++){long long a,b,c;scanf("%ld%ld%ld",&a,&b,&c);if(a+b>c)printf("Case #%d: true\n",i);elseprintf("Case #%d: false\n",i);} return 0; }

so so so so easy……


1012數(shù)字分類(lèi)

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int cnt;scanf("%d",&cnt);int A1=0,A2=0,A3=0,A5=0,A2p=-1,A2els=0;double A4=0.0,A4p=0.0;while(cnt--){int num;scanf("%d",&num);if(num%5==0&&num%2==0)A1+=num;if(num%5==1){A2p*=-1;A2+=A2p*num;A2els=1;}if(num%5==2){A3++;}if(num%5==3){A4+=num;A4p++;}if(num%5==4){if(num>A5)A5=num;}}if(A1==0)printf("N ");elseprintf("%d ",A1);if(A2els==0)printf("N ");elseprintf("%d ",A2);if(A3==0)printf("N ");elseprintf("%d ",A3);if(A4p==0.0)printf("N ");elseprintf("%.1lf ",A4/A4p);if(A5==0)printf("N\n");elseprintf("%d\n",A5);return EXIT_SUCCESS; }

小小小坑,判斷每一個(gè)情況是否有值。


1013數(shù)素?cái)?shù)

#include<stdio.h> #include<stdlib.h> #include<math.h> int ispre(int num) {if(num==1)return 0;if(num==2)return 1;for(int i=2;i<=num/i;i++){if(num%i==0)return 0;}return 1; } int array[10002]; int main(int argc,char **argv) {int M,N,cnt=0;scanf("%d%d",&M,&N);int i,j;for(i=2,j=1;j<=10000;i++){if(ispre(i))array[j++]=i;}for(i=M;i<=N;i++){cnt++;printf("%d",array[i]);if(cnt%10==0||i==N)printf("\n");elseprintf(" ");}return EXIT_SUCCESS; }

so so so easy,先打表,按要求依次輸出。


1014福爾摩斯的約會(huì)

#include<stdio.h> #include<stdlib.h> #include<ctype.h> int main(int argc,char **argv) {char str1[100],str2[100],str3[100],str4[100];scanf("%s%s%s%s",str1,str2,str3,str4);char week[10][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"};int first=-1,secend=-1,third=-1;for(int i=0;;i++){if(str1[i]==str2[i]&&first!=-1){if(isdigit(str1[i])){secend=str1[i]-'0';break;}else if(str1[i]>='A'&&str1[i]<='N'){secend=str1[i]-'A'+10;break;}}if(str1[i]==str2[i]&&first==-1&&(str1[i]>='A'&&str1[i]<='G')){first=str1[i]-'A';}}for(int i=0;;i++){if(str3[i]==str4[i]&&third==-1&&isalpha(str3[i])){third=i;break;}}printf("%s %02d:%02d\n",week[first],secend,third);return EXIT_SUCCESS; }

小小坑。A-N和A-G的范圍不能用無(wú)腦直接用isupper……。


1015德才論

#include<stdio.h> #include<stdlib.h> struct man {int number,de,cai;int rank; }; struct man sp[100000]; int compare(const void *a,const void *b) {const struct man *as=a;const struct man *bs=b;if(as->rank!=bs->rank)return -(as->rank-bs->rank);else if((as->de+as->cai)!=(bs->de+bs->cai))return -(as->de+as->cai)+(bs->de+bs->cai);else if(as->de!=bs->de)return -(as->de-bs->de);elsereturn as->number-bs->number; } int main(void) {int N,baseline,additionline;scanf("%d%d%d",&N,&baseline,&additionline);int index=0,sum=0;while(N--){int a,b,c,d;scanf("%d%d%d",&a,&b,&c);if(b<baseline||c<baseline)continue;sum++;if(b>=additionline&&c>=additionline){d=4;sp[index].number=a;sp[index].de=b;sp[index].cai=c;sp[index++].rank=d;continue;}if(b>=additionline&&c<additionline){d=3;sp[index].number=a;sp[index].de=b;sp[index].cai=c;sp[index++].rank=d;continue;}if(b>=c&&b<additionline&&c<additionline){d=2;sp[index].number=a;sp[index].de=b;sp[index].cai=c;sp[index++].rank=d;continue;}d=1;sp[index].number=a;sp[index].de=b;sp[index].cai=c;sp[index++].rank=d;}qsort(sp,index,sizeof(struct man),compare);printf("%d\n",sum);for(int i=0;i<index;i++){printf("%d %d %d\n",sp[i].number,sp[i].de,sp[i].cai);}return EXIT_SUCCESS; }

編寫(xiě)compare函數(shù)借助qsort即可,STL的sort同理。


1016部分A+B

#include<stdio.h> #include<stdlib.h> int getnum(int sp,int key) {int sumn=0;while(sp){int sol=sp%10;if(sol==key)sumn=sumn*10+key;sp/=10;}return sumn; } int main(int argc,char *argv[]) {int a,as,b,bs;scanf("%d%d%d%d",&a,&as,&b,&bs);printf("%d\n",getnum(a,as)+getnum(b,bs));return EXIT_SUCCESS; }

so easy。提取符合的每一位相加。


1017A除以B

#include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc,char *argv[]) {char bignumber[1005];char div[1005];scanf("%s",bignumber);int key;scanf("%d",&key);int mod=0,index=0,firstblood=0;for(int i=0;i<strlen(bignumber);i++){mod+=bignumber[i]-'0';if(key>mod){mod*=10;if(firstblood)div[index++]='0';continue;}if(!firstblood)firstblood=1;div[index++]=mod/key+'0';mod=mod%key*10;}if(index==0)div[index++]='0';div[index]=0;printf("%s %d\n",div,mod/10);return EXIT_SUCCESS; }

小坑,存在除數(shù)為 0 的情況。


1018錘子剪刀布

#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) {int cnt;scanf("%d%*c",&cnt);int wina[5]={0},winb[5]={0},wa=0,wb=0,equ=0,max;char maxa='B',maxb='B';while(cnt--){char q,w;scanf("%c %c%*c",&q,&w);if(q=='C'&&w=='J'||q=='J'&&w=='B'||q=='B'&&w=='C'){wa++;if(q=='B')wina[1]++;if(q=='C')wina[2]++;if(q=='J')wina[3]++;max=wina[1],maxa='B';if(wina[2]>max)max=wina[2],maxa='C';if(wina[3]>max)max=wina[3],maxa='J';continue;}else if(w=='C'&&q=='J'||w=='J'&&q=='B'||w=='B'&&q=='C'){wb++;if(w=='B')winb[1]++;if(w=='C')winb[2]++;if(w=='J')winb[3]++;max=winb[1],maxb='B';if(winb[2]>max)max=winb[2],maxb='C';if(winb[3]>max)max=winb[3],maxb='J';continue;}elseequ++;}printf("%d %d %d\n%d %d %d\n",wa,equ,wb,wb,equ,wa);printf("%c %c\n",maxa,maxb);return EXIT_SUCCESS; }

so easy。統(tǒng)計(jì)輸贏情況。


1019數(shù)字黑洞

#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) {int whole;scanf("%d",&whole);int a[5],firstblood=0;while(whole!=6174&&whole!=0||firstblood==0){if(!firstblood)firstblood=1;a[1]=whole%10;a[2]=whole/10%10;a[3]=whole/100%10;a[4]=whole/1000%10;for(int i=1;i<4;i++)for(int j=1;j<=4-i;j++)if(a[j]>a[j+1]){int temp=a[j];a[j]=a[j+1];a[j+1]=temp;}int big=a[1]+a[2]*10+a[3]*100+a[4]*1000;int small=a[4]+a[3]*10+a[2]*100+a[1]*1000;whole=big-small;printf("%04d - %04d = %04d\n",big,small,whole);}return EXIT_SUCCESS; }

小坑,輸入是6174的情況。


1020月餅

#include<stdio.h> #include<stdlib.h> //#define HOST typedef struct {double si;double sum,num; }moon; moon cakes[1005]={0}; int compare(const void *a,const void *b) {const moon *sa=(const moon*)a;const moon *sb=(const moon*)b;if(sb->si>sa->si)return 1;if(sb->si<sa->si)return -1;return 0; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint n,need;scanf("%d%d",&n,&need);for(int i=0;i<n;i++)scanf("%lf",&cakes[i].num);for(int i=0;i<n;i++)scanf("%lf",&cakes[i].sum);for(int i=0;i<n;i++)cakes[i].si=cakes[i].sum/cakes[i].num;qsort(cakes,n,sizeof(moon),compare);double ans=0.0;for(int i=0;i<n;i++){if(need<=cakes[i].num){ans+=cakes[i].si*need;break;}else{ans+=cakes[i].sum;need-=cakes[i].num;}}printf("%.2lf\n",ans);return EXIT_SUCCESS; }

小坑。第二行第三行輸入的庫(kù)存和總價(jià)題目說(shuō)明是正數(shù),可以是小數(shù)的。


1021個(gè)位數(shù)統(tǒng)計(jì)

#include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc,char *argv[]) {char bignumber[1005];int book[10]={0};scanf("%s",bignumber);for(int i=0;i<strlen(bignumber);i++)book[bignumber[i]-'0']++;for(int i=0;i<10;i++)if(book[i])printf("%d:%d\n",i,book[i]);return EXIT_SUCCESS; }

so so so so easy。統(tǒng)計(jì)各個(gè)數(shù)字出現(xiàn)個(gè)數(shù)輸出。


1022D進(jìn)制的A+B

#include<stdio.h> #include<stdlib.h> #include<string.h> int* tobasenumber(long long original,int base) {static int array[30]={0},index=1;if(!original)array[index++]=0;while(original){array[index++]=original%base;original/=base;}array[0]=index-1;return array; } int main(int argc,char *argv[]) {long long a,b;scanf("%lld%lld",&a,&b);long long sum=a+b;int base;scanf("%d",&base);int *point=tobasenumber(sum,base);for(int i=point[0];i>0;i--)printf("%d",point[i]);putchar('\n');return EXIT_SUCCESS; }

小坑。存在和為 0 的情況。


1023組個(gè)最小數(shù)

#include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc,char *argv[]) {int book[10]={0};for(int i=0;i<10;i++)scanf("%d",&book[i]);int index=1;while(book[index]==0)index++;book[index]--;printf("%d",index);index=0;while(index<=9){if(!book[index]){index++;continue; }printf("%d",index);book[index]--;}putchar('\n');return EXIT_SUCCESS; }

so easy。第一個(gè)數(shù)從1開(kāi)始取最小數(shù),后面的數(shù)從零開(kāi)始取。


1024科學(xué)計(jì)數(shù)法

#include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc,char *argv[]) {char str[11000];scanf("%s",str);int ends=0;for(int i=1;;i++)if(str[i]=='E'){ends=i;break;}int psss=0,endall=strlen(str)-1,copyends=ends+2;while(endall>=copyends){psss=psss*10+str[copyends]-'0';copyends++;}if(str[ends+1]=='-')psss=-psss;if(str[0]=='-')putchar(str[0]);if(psss>0){printf("%c",str[1]);for(int i=0;i<ends-3||i<psss;i++){if((i==psss)&&(i<ends-3))putchar('.');if(i<ends-3)putchar(str[i+3]);elseputchar('0');}}else if(psss<0){putchar('0');putchar('.');for(int i=1;i<abs(psss);i++)putchar('0');putchar(str[1]);for(int i=0;i<ends-3;i++)putchar(str[i+3]);}else{for(int i=1;i<ends;i++)putchar(str[i]);}putchar('\n');return EXIT_SUCCESS; }

先把輸入處理成有效數(shù)字、正負(fù)號(hào)、指數(shù)值幾部分,后根據(jù)指數(shù)正、負(fù)、零,分析輸出即可。


1025反轉(zhuǎn)鏈表

#include<stdio.h> #include<stdlib.h> //#define HOST typedef struct {int data;int next; }node; node sp[100005]={0}; int ans[100005]={0}; void reverse(int left,int right) {while(left<right){int temp=ans[left];ans[left]=ans[right];ans[right]=temp;left++,right--;}return; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint begin,cnt,isp;scanf("%d%d%d",&begin,&cnt,&isp);for(int i=0;i<cnt;i++){int temp;scanf("%d",&temp);scanf("%d%d",&sp[temp].data,&sp[temp].next);}int index=0;while(begin!=-1){ans[index++]=begin;begin=sp[begin].next;}for(int i=0;i<(index)/isp;i++){int left=i*isp,right=(i+1)*isp-1;reverse(left,right);}printf("%05d %d",ans[0],sp[ans[0]].data);for(int i=1;i<index;i++)printf(" %05d\n%05d %d",ans[i],ans[i],sp[ans[i]].data);printf(" -1\n");return EXIT_SUCCESS; }

讀取鏈表數(shù)據(jù),轉(zhuǎn)換成數(shù)組存儲(chǔ)。逐一反轉(zhuǎn)數(shù)組即可。


1026程序運(yùn)行時(shí)間

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int time1,time2;scanf("%d%d",&time1,&time2);float time=(time2-time1)/100.0-(time2-time1)/100;if(time>=0.5)time=(time2-time1)/100+1;elsetime=(time2-time1)/100;int sp=time;printf("%02d:%02d:%02d\n",sp/3600,sp%3600/60,sp%3600%60);return EXIT_SUCCESS; }

so so easy。得到程序運(yùn)行秒數(shù)后,四舍五入成整數(shù)后按格式輸出。


1027打印沙漏

#include<stdio.h> int main(int argc,char** argv) {int sum;char ch;scanf("%d %c",&sum,&ch);int i=1,msum=1,fk=sum-msum;while(fk>=(i+2)*2){i+=2;msum+=2*i;fk=sum-msum;}int ins=i;while(ins>1){int ind=ins,inf=(i-ins)/2;while(inf--)putchar(' ');while(ind--)putchar(ch);putchar('\n');ins-=2;}int inf=(i-1)/2;while(inf--)putchar(' ');putchar(ch);putchar('\n');ins=3;while(ins<=i){int ind=ins,inf=(i-ins)/2;while(inf--)putchar(' ');while(ind--)putchar(ch);putchar('\n');ins+=2;}printf("%d\n",fk);return 0; }

老題目,先計(jì)算好沙漏第一行字符個(gè)數(shù)和剩余值,循環(huán)輸出即可。


1028人口普查

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct member {char name[10];int year,month,day; }member;int compare(member x,member y) {if(x.year==y.year)if(x.month==y.month)if(x.day==y.day)return 0;elsereturn x.day-y.day;elsereturn x.month-y.month;elsereturn x.year-y.year; } int check(member x) {if(x.year>2014)return 1;if(x.year==2014){if(x.month>9)return 1;if(x.month==9)if(x.day>6)return 1;}if(x.year<1814)return 1;if(x.year==1814){if(x.month<9)return 1;if(x.month==9)if(x.day<6)return 1;}return 0; } int main(int argc, char *argv[]) {int cnt;scanf("%d",&cnt);member maxn,minn;int sumcurrect=0,firstblood=0;while(cnt--){member now;scanf("%s%d/%d/%d",now.name,&now.year,&now.month,&now.day);if(check(now))continue;sumcurrect++;if(!firstblood){firstblood=1;maxn=minn=now;}else{if(compare(now,maxn)>0)maxn=now;if(compare(minn,now)>0)minn=now; } }if(firstblood)printf("%d %s %s\n",sumcurrect,minn.name,maxn.name);elseprintf("0\n");return 0; }

天坑。存在沒(méi)有一個(gè)滿足的人的情況(只輸出一個(gè) 0 ),還需考慮只有一個(gè)滿足的人的情況(最大最小輸出同一個(gè)人的名字)。


1029舊鍵盤(pán)

#include<stdio.h> #include<ctype.h> int book[128]={0}; char stack[1000]={0}; int main(int argc,char** agrv) {char str1[1000],str2[1000];scanf("%s%s",str1,str2);int point1=0,point2=0,point3=0;while(str1[point1]){if(str1[point1]==str2[point2]){point1++;point2++;}else{int sp=toupper(str1[point1]);if(book[sp]==0){book[sp]=1;stack[point3++]=sp;}point1++;}}stack[point3]=0;printf("%s\n",stack);return 0; }

so easy。


1030完美數(shù)列

#include<stdio.h> #include<stdlib.h> #define max(x,y) ((x>y)?(x):(y)) long long array[100005]; int compare(const void *a,const void *b) {return (*(long long*)a-*(long long*)b); } int main(int argc,char **argv) {int cnt,k;scanf("%d%d",&cnt,&k);for(int i=0;i<cnt;i++){scanf("%lld",&array[i]);}qsort(array,cnt,sizeof(long long),compare);int sp=0;for(int i=0;i<cnt;i++)for(int j=i+sp;j<cnt;j++)if(array[i]*k<array[j])break;elsesp=max(sp,j-i+1);printf("%d\n",sp);return EXIT_SUCCESS; }

排序后循環(huán)查找最大可能值。


1031查驗(yàn)身份證

#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) {int cnt;scanf("%d",&cnt);int table[20]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};int allok=1;while(cnt--){char idcardnumber[20];scanf("%s",idcardnumber);int sum=0;for(int i=0;i<17;i++)sum+=(idcardnumber[i]-'0')*table[i];sum%=11;char book[20]={'1','0','X','9','8','7','6','5','4','3','2'};if(book[sum]!=idcardnumber[17]){if(allok)allok=0;printf("%s\n",idcardnumber);}}if(allok)printf("All passed\n");return EXIT_SUCCESS; }

按所給計(jì)算方法判斷是否通過(guò)。


1032挖掘機(jī)技術(shù)哪家強(qiáng)

#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) {int cnt,max=0;scanf("%d",&cnt);int *array=(int*)calloc(100005,sizeof(int));while(cnt--){int a,b;scanf("%d%d",&a,&b);array[a]+=b;if(array[max]<array[a])max=a;}printf("%d %d\n",max,array[max]);free(array);return EXIT_SUCCESS; }

so easy。


1033舊鍵盤(pán)打字

#include <stdio.h> #include <ctype.h> int main(int argc,char** argv) {char A[128] = {0}, ch;while ((ch = getchar()) != '\n')A[ch]++;while ((ch = getchar()) != '\n')if ((isupper(ch) && A[43]) || A[toupper(ch)])continue;elseputchar(ch);return 0; }

記錄第一個(gè)字符串出現(xiàn)字符,過(guò)濾第二個(gè)字符串。


1034有理數(shù)四則運(yùn)算

#include<stdio.h> #include<stdlib.h> #define mabs(a) (a<0?(-a):(a)) long long gcd(long long m,long long n) {if(m<0)m=-m;if(n<0)n=-n;return (m%n?gcd(n,m%n):n); } void printnum(long long a,long long b) {if (b == 0){printf("Inf");return;}int sign=1;if((a<0&&b>0)||(a>0&&b<0)){sign=-1;}a=mabs(a);b=mabs(b);int temp=gcd(a, b);a/=temp;b/=temp;if(sign==-1)printf("(-");if(b==1)printf("%lld", a);else if(a>b)printf("%lld %lld/%lld",a/b,a%b,b);elseprintf("%ld/%ld", a, b);if(sign==-1)printf(")");return; } int main(int argc,char **argv) {long long a[2],b[2];scanf("%lld/%lld %lld/%lld",&a[0],&a[1],&b[0],&b[1]);printnum(a[0],a[1]);printf(" + ");printnum(b[0],b[1]);printf(" = ");printnum(a[0]*b[1]+a[1]*b[0],a[1]*b[1]);putchar('\n');printnum(a[0],a[1]);printf(" - ");printnum(b[0],b[1]);printf(" = ");printnum(a[0]*b[1]-a[1]*b[0],a[1]*b[1]);putchar('\n');printnum(a[0],a[1]);printf(" * ");printnum(b[0],b[1]);printf(" = ");printnum(a[0]*b[0],a[1]*b[1]);putchar('\n');printnum(a[0],a[1]);printf(" / ");printnum(b[0],b[1]);printf(" = ");printnum(a[0]*b[1],a[1]*b[0]);putchar('\n');return EXIT_SUCCESS; }

坑。必須使用long long。分成兩部分,一部分是直接計(jì)算分子、分母值及格式輸出;另一部分是化簡(jiǎn)分子、分母為要求的格式。


1035插入與歸并

#include<stdio.h> #include<stdlib.h> //#define HOST void InsertionSort(int *arr,int begin,int len) {if(begin>=len)begin=len-1;int temp=arr[begin];for(int i=begin-1;i>=0;i--){if(arr[i]>temp)arr[i+1]=arr[i],arr[i]=temp;elsebreak;}return; } void MergeSort(int *arr,int begin,int len) {if(begin>=len)begin=len;int start=0,end=0;for(int i=0;i<len;i+=begin){start=i;end=(start+begin>len?len:start+begin);for(int m=end-1;m>=start;m--){int iloc=-1,max=arr[start],l=0;for(l=start;l<=m;l++)if(arr[l]>=max)iloc=l,max=arr[l]; if(iloc>=0)arr[iloc]=arr[l-1],arr[l-1]=max; }}return; } int match(int *diff1,int *diff2,int len) {for(int i=0;i<len;i++)if(diff1[i]!=diff2[i])return 0;return 1; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,num1[105]={0},num2[105]={0},num1s[105]={0};scanf("%d",&cnt);for(int i=0;i<cnt;i++)scanf("%d",&num1[i]);for(int i=0;i<cnt;i++)scanf("%d",&num2[i]);for(int i=0;i<cnt;i++) num1s[i]=num1[i];for(int i=1;i<cnt;i++){InsertionSort(num1s,i,cnt);if(match(num2,num1s,cnt)){printf("Insertion Sort\n"); InsertionSort(num1s,i+1,cnt);for(int j=0;j<cnt;j++)printf("%d%c",num1s[j],j==cnt-1?'\n':' ');return EXIT_SUCCESS;}}for(int i=1;i<=2*cnt;i*=2){MergeSort(num1,i,cnt);if(match(num2,num1,cnt)){printf("Merge Sort\n");MergeSort(num1,2*i,cnt);for(int j=0;j<cnt;j++)printf("%d%c",num1[j],j==cnt-1?'\n':' ');return 0;}} return EXIT_SUCCESS; }

考察插入排序和歸并排序。一步一步進(jìn)行插入/歸并排序,如果出現(xiàn)與目標(biāo)序列一致則輸出排序種類(lèi),再進(jìn)行一次對(duì)應(yīng)排序后輸出序列。


1036跟奧巴馬一起編程

#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) {int cnt;char ch;scanf("%d %c",&cnt,&ch);for(int i=1;i<=cnt;i++)putchar(ch);putchar('\n');for(int i=1;i<=(int)((cnt/2.0)+0.5)-2;i++){putchar(ch);for(int j=1;j<=cnt-2;j++)putchar(' ');putchar(ch);putchar('\n');}for(int i=1;i<=cnt;i++)putchar(ch);putchar('\n'); return EXIT_SUCCESS; }

so easy。


1037在霍格沃茨找零錢(qián)

#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) {int a,b,c;int x,y,z;scanf("%d.%d.%d",&a,&b,&c);scanf("%d.%d.%d",&x,&y,&z);int abc,xyz;abc=c+b*29+a*17*29;xyz=z+y*29+x*17*29;abc-=xyz;if(abc>0)putchar('-');elseabc=-abc;printf("%d.%d.%d\n",abc/(17*29),abc%(17*29)/29,abc%(17*29)%29);return EXIT_SUCCESS; }

so easy。單位轉(zhuǎn)換。


1038統(tǒng)計(jì)同成績(jī)學(xué)生

#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) {int *array=(int*)calloc(101,sizeof(int));int cnt;scanf("%d",&cnt);while(cnt--){int score;scanf("%d",&score);array[score]++;}scanf("%d",&cnt);while(cnt--){int sp;scanf("%d",&sp);printf("%d",array[sp]);if(cnt)printf(" ");}free(array);return EXIT_SUCCESS; }

so so so easy。


1039到底買(mǎi)不買(mǎi)

#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) {int *array=(int*)calloc(128,sizeof(int));char sp;int total=0;while(sp=getchar(),sp!='\n'){array[sp]++;total++; }while(sp=getchar(),sp!='\n'){array[sp]--;total--; }int require=0,none=1,redundant=0;for(int i=1;i<128;i++){if(array[i]<0){if(none)none=0;require+=-array[i]; }if(array[i]>0)redundant+=array[i]; }if(none)printf("Yes %d\n",redundant);elseprintf("No %d\n",require);free(array);return EXIT_SUCCESS; }

根據(jù)第一個(gè)字符串統(tǒng)計(jì)第二個(gè)字符串,多出/缺少的字符數(shù)。


1040有幾個(gè)PAT

#include<stdio.h> #include<stdlib.h> #define MOD 1000000007 int main(int argc,char *argv[]) {int p=0,pa=0,pat=0;char sp;while(sp=getchar(),sp!='\n'){if(sp=='P')p++;if(sp=='A'){pa+=p;pa%=MOD;}if(sp=='T'){pat+=pa;pat%=MOD;}}printf("%d\n",pat);return EXIT_SUCCESS; }

每個(gè)A都可以和前面任意一個(gè)P配對(duì),每個(gè)T都可以和前面任意一個(gè)PA配對(duì)。還需不斷的取余。

(a+b+c)%d==(a%d+b%d+c%d)%d


1041考試座位號(hào)

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct {char ID[20];int num; }student; int main(int argc,char **argv) {int cnt;scanf("%d",&cnt);student *sp=(student*)calloc(cnt+1,sizeof(student));while(cnt--){student now;int index;scanf("%s %d %d",now.ID,&index,&now.num);strcpy(sp[index].ID,now.ID);sp[index].num=now.num;}scanf("%d",&cnt);while(cnt--){int index;scanf("%d",&index);printf("%s %d\n",sp[index].ID,sp[index].num);}free(sp);return EXIT_SUCCESS; }

so easy。結(jié)構(gòu)體數(shù)組存取。


1042字符統(tǒng)計(jì)

#include<stdio.h> #include<stdlib.h> #include<ctype.h> int main(int argc,char **argv) {int alpha[26]={0};char ch;while((ch=getchar())!=EOF)if(isalpha(ch))alpha[tolower(ch)-'a']++;int max=0,sp;for(int i=25;i>=0;i--)if(alpha[i]>=max)sp=i,max=alpha[i];printf("%c %d\n",sp+'a',max);return EXIT_SUCCESS; }

將字母變成小寫(xiě)后,統(tǒng)計(jì)出現(xiàn)個(gè)數(shù)。逆序查找最大值。


1043輸出PATest

#include<stdio.h> #include<stdlib.h> #include<ctype.h> int main(int argc,char **argv) {int alpha[7]={0};char ch;int sum=0;while((ch=getchar())!=EOF){if(ch=='P')alpha[1]++,sum++;if(ch=='A')alpha[2]++,sum++;if(ch=='T')alpha[3]++,sum++;if(ch=='e')alpha[4]++,sum++;if(ch=='s')alpha[5]++,sum++;if(ch=='t')alpha[6]++,sum++;}char sp[7]={0,'P','A','T','e','s','t'};while(sum)for(int i=1;i<=6;i++)if(alpha[i]>0){alpha[i]--;sum--;putchar(sp[i]);}return EXIT_SUCCESS; }

so so easy,篩選輸出。


1044火星數(shù)字

#include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<string.h> char mars1[13][4]={"","tam","hel","maa","huh","tou","kes",\ "hei","elo","syy","lok","mer","jou"}; char mars2[13][5]={"tret","jan","feb","mar","apr","may","jun",\ "jly","aug","sep","oct","nov","dec"}; void tomars(int num) {int sp1=num/13,sp2=num%13;if(sp1)printf("%s",mars1[sp1]);if(sp1&&sp2)putchar(' ');if((!sp2&&!sp1)||sp2)printf("%s",mars2[sp2]);putchar('\n');return; } void toearth(char *str) {int sum=0;char temp[4]="",temps[5]="";sscanf(str,"%s%s",temp,temps);int sp1,sp2;for(int i=1;i<=12;i++)if(!strcmp(mars1[i],temp)){sum+=i*13;break;}for(int i=0;i<=12;i++)if(!strcmp(mars2[i],temps)||!strcmp(mars2[i],temp)){sum+=i;break;}printf("%d\n",sum);return; } int main(int argc,char **argv) {int cnt;scanf("%d",&cnt);while(cnt--){char str[20]={0};scanf("%*c%[^\n]",str);if(isdigit(str[0])){int num;sscanf(str,"%d",&num);tomars(num);}elsetoearth(str);}return EXIT_SUCCESS; }

花里胡哨版進(jìn)制轉(zhuǎn)換,用sscanf從字符串中讀取可以簡(jiǎn)便許多。


1045快速排序

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int cnt;scanf("%d",&cnt);int sp[100001][3],dp[100001];for(int i=0;i<cnt;i++)scanf("%d",&sp[i][0]);int leftmax=0;for(int i=0;i<cnt;i++){sp[i][1]=leftmax;if(sp[i][0]>leftmax)leftmax=sp[i][0];}int rightmin=1<<30;for(int i=cnt-1;i>=0;i--){sp[i][2]=rightmin;if(sp[i][0]<rightmin)rightmin=sp[i][0];}int index=0,sum=0;for(int i=0;i<cnt;i++){int ok=1;if(sp[i][1]>=sp[i][0])ok=0;if(sp[i][2]<=sp[i][0])ok=0;if(ok){sum++;dp[index++]=sp[i][0];}}printf("%d\n",sum);for(int i=0;i<index;i++){ printf("%d",dp[i]);if(i!=index-1)putchar(' '); }putchar('\n');return EXIT_SUCCESS; }

此題天坑!首先如果輸入 0 的話,得到的輸出應(yīng)該是 0后面跟兩個(gè)回車(chē)……測(cè)試點(diǎn)2就是輸入為0。

其次,題目中說(shuō)按遞增順序輸出這些元素。意思是按原順序輸出,并不用遞增排序。

于是跑一遍左側(cè)最大值、右側(cè)最小值,選擇滿足要求的輸出就完事了……


1046劃拳

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int cnt;scanf("%d",&cnt);int suma=0,sumb=0;while(cnt--){int a,b,sa,sb;scanf("%d%d%d%d",&a,&sa,&b,&sb);if(a+b==sa&&a+b!=sb)suma++;if(a+b==sb&&a+b!=sa)sumb++;}printf("%d %d\n",sumb,suma);return EXIT_SUCCESS; }

so so so so easy。


1047編程團(tuán)體賽

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int cnt;int score[1001]={0};scanf("%d",&cnt);while(cnt--){int team,member;scanf("%d-%*d",&team);scanf("%d",&member);score[team]+=member;}int max=0;for(int i=1;i<=1000;i++){if(score[i]>score[max])max=i;}printf("%d %d\n",max,score[max]);return EXIT_SUCCESS; }

so so so easy。


1048數(shù)字加密

#include<stdio.h> #include<stdlib.h> #include<string.h> char gotch(int num) {if(num>=0&&num<=9)return num+'0';else if(num==10)return 'J';else if(num==11)return 'Q';else if(num==12)return 'K';return -1; } int main(int argc,char **argv) {char *ans=NULL,*other=NULL;char num1[105],num2[105];scanf("%s%s",num1,num2);int i,sp=1;int len1=strlen(num1)-1,len2=strlen(num2)-1;if(len1>len2)ans=num1;elseans=num2;for(i=strlen(ans)-1;i>=0;i--){char temp1,temp2;if(len1<0)temp1='0';elsetemp1=num1[len1--];if(len2<0)temp2='0';elsetemp2=num2[len2--];if(sp){ans[i]=gotch(((temp1-'0')+(temp2-'0'))%13);sp=0;}else{ ans[i]=temp2-temp1;if(ans[i]<0)ans[i]+='0'+10;elseans[i]+='0';sp=1;}}printf("%s\n",ans);return EXIT_SUCCESS; }

天坑!題目并沒(méi)有說(shuō)明白數(shù)字A可能比數(shù)字B長(zhǎng),測(cè)試點(diǎn)2和5就是數(shù)字A比數(shù)字B長(zhǎng)的情況,這時(shí)需要短的數(shù)字補(bǔ)零。

顯而易見(jiàn)的做法是反轉(zhuǎn)字符串,然后把短的補(bǔ)零,再逐位計(jì)算。

。。然而我并不想寫(xiě)reverse函數(shù)。

1.判斷哪個(gè)數(shù)字長(zhǎng),指針指向長(zhǎng)的數(shù)字。

2.兩數(shù)字從個(gè)位開(kāi)始逐位計(jì)算,如果有一個(gè)數(shù)字的索引 <0 則去值為 ‘0’ 。

3.輸出指針?biāo)傅淖址?/p>


1049數(shù)列的片段和

#include<iostream> using namespace std; int main(int argc,char *argv[]) {int cnt;cin>>cnt;long double sum=0.0;for(int i=1;i<=cnt;++i){long double temp;cin>>temp;sum+=temp*i*(cnt+1-i);}printf("%.2Lf\n",sum);return 0; }

每個(gè)數(shù)出現(xiàn)的個(gè)數(shù)是(左邊數(shù)的個(gè)數(shù)+1)*(右邊數(shù)的個(gè)數(shù)+1)。


1050螺旋矩陣

#include<stdio.h> #include<stdlib.h> #include<math.h> int compare(const void *a,const void *b) {return -*(const int*)a+*(const int*)b; } int main(int argc,char **argv) {int cnt;scanf("%d",&cnt);int i,j,index=1;int *array=(int*)calloc(cnt+1,sizeof(int));for(i=1;i<=cnt;i++)scanf("%d",&array[i]);qsort(array+1,cnt,sizeof(int),compare); int n=(int)floor(sqrt(cnt)),m;while(cnt%n)n--;m=cnt/n;int **matrix=(int**)calloc(m+5,sizeof(int*));for(i=0;i<=m+5;i++)matrix[i]=(int*)calloc(n+5,sizeof(int));i=j=1;while(cnt>0){while(matrix[i][j]==0&&j<=n)matrix[i][j++]=array[index++],cnt--;j--,i++;while(matrix[i][j]==0&&i<=m)matrix[i++][j]=array[index++],cnt--;i--,j--;while(matrix[i][j]==0&&j>=1)matrix[i][j--]=array[index++],cnt--;j++,i--;while(matrix[i][j]==0&&i>=1)matrix[i--][j]=array[index++],cnt--;i++,j++;}for(i=1;i<=m;i++)for(j=1;j<=n;j++)printf("%d%c",matrix[i][j],j==n?'\n':' ');return EXIT_SUCCESS; }

free函數(shù)竟然會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。。肯能是PAT這里只能申請(qǐng)堆內(nèi)存不能釋放??

沒(méi)有說(shuō)明N的大小范圍,須動(dòng)態(tài)申請(qǐng)內(nèi)存空間。


1051復(fù)數(shù)乘法

#include<stdio.h> #include<stdlib.h> #include<math.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifdouble R1,R2,P1,P2;scanf("%lf%lf%lf%lf",&R1,&P1,&R2,&P2);double t1=R1*cos(P1),r1=R1*sin(P1),t2=R2*cos(P2),r2=R2*sin(P2);double ans1=t1*t2-r1*r2;double ans2=t1*r2+t2*r1;if(ans1>-0.005&&ans1<0.0)ans1=0.0;if(ans2>-0.005&&ans2<0.0)ans2=0.0;printf("%.2lf%+.2lfi\n",ans1,ans2); return EXIT_SUCCESS; }

小坑。須注意 0.0 ~ -0.005 之間四舍五入成 -0.0 的問(wèn)題,應(yīng)是 +0.0 。


1052賣(mài)個(gè)萌

#include<stdio.h> #include<stdlib.h> #include<string.h> int get(char out[][10]) {char temp;int index=0,spdex=0;while((temp=getchar())!='\n'){if(temp=='['){index=0;while((temp=getchar())!=']')out[spdex][index++]=temp;out[spdex][index]=0;spdex++;}}return spdex; } int main(int argc,char **argv) {char shou[15][10]={0};char yan[15][10]={0};char kou[15][10]={0};int shoumax=get(shou);int yanmax=get(yan);int koumax=get(kou);int cnt; scanf("%d",&cnt);while(cnt--){int t1,t2,t3,t4,t5;scanf("%d%d%d%d%d",&t1,&t2,&t3,&t4,&t5);if((t1<1||t1>shoumax)||(t2<1||t2>yanmax)||(t3<1||t3>koumax)||(t4<1||t4>yanmax)||(t5<1||t5>shoumax)){printf("Are you kidding me? @\\/@\n");continue;}printf("%s",shou[t1-1]);putchar('(');printf("%s",yan[t2-1]);printf("%s",kou[t3-1]);printf("%s",yan[t4-1]);putchar(')');printf("%s",shou[t5-1]);putchar('\n');}return EXIT_SUCCESS; }

小坑。不知道是不是編碼類(lèi)型不對(duì),在筆記本上運(yùn)行讀取不了貌似是日語(yǔ)的字符。一開(kāi)始用掃描集讀取一行也失敗了,失敗原因應(yīng)該就是日語(yǔ)字符讀取失敗直接退出了。


1053住房空置率

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int cnt,lday; double limit;scanf("%d%lf%d",&cnt,&limit,&lday);int maybe=0,able=0;for(int j=0;j<cnt;j++){int cnts,mb=0;double input;scanf("%d",&cnts);for(int i=0;i<cnts;i++){scanf("%lf",&input);if(input<limit)mb++;}if(mb>(cnts/2)){if(cnts>lday)able++;elsemaybe++;}}printf("%.1lf%% %.1lf%%\n",(double)maybe/cnt*100.0,(double)able/cnt*100.0);return EXIT_SUCCESS; }

坑!題目中說(shuō)的是“?若觀察期超過(guò)某給定閾值 ”,并不是低于電量低于某給定的閾值e的天數(shù)…

看題的時(shí)候想當(dāng)然了,理解錯(cuò)的話測(cè)試點(diǎn)1,2就會(huì)過(guò)不去。


1054求平均值

#include<stdio.h> #include<ctype.h> #include<stdlib.h> #include<stdbool.h> #include<math.h> bool check(char *s) {int i=0;if(s[0]=='-')i++;for(;s[i]&&s[i]!='.';i++)if(!isdigit(s[i]))return false; if(s[i]=='.')for(int j=i+1;s[j];j++)if(!isdigit(s[j])||j-i>2)return false; double temp=fabs(atof(s));if(temp>1000.0)return false;return true; } int main(int argc,char **argv) {int cnt;scanf("%d",&cnt);int ins=0;double sum=0.0;while(cnt--){char str[100]={0};scanf("%s",str);if(check(str)){ins++;sum+=atof(str);}elseprintf("ERROR: %s is not a legal number\n",str);}if(ins){if(ins==1)printf("The average of 1 number is %.2lf\n",sum);elseprintf("The average of %d numbers is %.2f\n",ins,sum/ins);}elseprintf("The average of 0 numbers is Undefined\n");return EXIT_SUCCESS; }

一上來(lái)就想用個(gè)sscanf騷操作。。一番操作浪費(fèi)了一個(gè)多小時(shí)……

然后老老實(shí)實(shí)的先判斷再 atof(str) 了。。。


1055集體照

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct {char name[10];int high; }student; int compare(const void *a,const void *b) {const student *sa=a;const student *sb=b;if(sa->high==sb->high)return strcmp(sa->name,sb->name);elsereturn sb->high-sa->high; } int main(int argc,char **argv) {int cnt,row;scanf("%d%d",&cnt,&row);int div=cnt/row,column=cnt%div+div;student class[10005];for(int i=0;i<cnt;i++)scanf("%s%d",class[i].name,&class[i].high);qsort(class,cnt,sizeof(student),compare);int temp[100005]={0},sum=1,index=0;temp[column/2+1]=index++;for(int i=1;;i++){if(sum>=column)break;temp[column/2+1-i]=index++;sum++;if(sum>=column)break;temp[column/2+1+i]=index++;sum++;}for(int i=1;i<=column;i++)printf("%s%c",class[temp[i]].name,i==column?'\n':' ');for(int i=row-1;i>=1;i--){sum=1;temp[div/2+1]=index++;int offset=1; while(1){if(sum>=div)break;temp[div/2+1-offset]=index++;sum++;if(sum>=div)break;temp[div/2+1+offset]=index++;sum++;offset++;}for(int j=1;j<=div;j++)printf("%s%c",class[temp[j]].name,j==div?'\n':' ');}return EXIT_SUCCESS; }

從高到低+字典序升序排列后,每一行安排好對(duì)應(yīng)位置的編號(hào),再依次輸出即可。


1056組合數(shù)的和

#include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) {int cnt; scanf("%d",&cnt);int array[10]={0};for(int i=0;i<cnt;i++)scanf("%d",&array[i]);int sum=0;for(int i=0;i<cnt;i++)for(int j=0;j<cnt;j++){if(i==j)continue;sum+=array[i]*10+array[j];}printf("%d\n",sum);return EXIT_SUCCESS; }

so so so so easy。


1057數(shù)零壹

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> int main(int argc,char **argv) {char str[100005]={0};scanf("%[^\n]",str);unsigned int sum=0;for(int i=0;i<strlen(str);i++){if(isalpha(str[i])){char ch=tolower(str[i]);sum+=ch-'a'+1;}}int zero=0,one=0;while(sum){if(sum&1)one++;elsezero++;sum>>=1;}printf("%d %d\n",zero,one);return EXIT_SUCCESS; }

so so so so easy。


1058選擇題

#include<stdio.h> #include<stdlib.h> #include<string.h> //#define HOST typedef struct {int score;int anssum;int anscnt;char ans[6]; }subject; int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt1,cnt2;scanf("%d%d",&cnt1,&cnt2);subject sp[105];for(int i=0;i<cnt2;i++){scanf("%d%d%d",&sp[i].score,&sp[i].anssum,&sp[i].anscnt);for(int j=0;j<sp[i].anscnt;j++)scanf("%*c%c",&sp[i].ans[j]);sp[i].ans[sp[i].anscnt]=0;}int book[105]={0},bookmax=0;while(cnt1--){int sum=0;for(int i=0;i<cnt2;i++){while(getchar()!='(');int xuan;char xuanans[6]={0};scanf("%d",&xuan);for(int j=0;j<xuan;j++)scanf("%*c%c",&xuanans[j]);getchar();if(xuan!=sp[i].anscnt||strcmp(xuanans,sp[i].ans)){book[i]++;if(book[i]>bookmax)bookmax=book[i];continue;}sum+=sp[i].score;}printf("%d\n",sum);}if(!bookmax)printf("Too simple\n");else{printf("%d",bookmax);for(int i=0;i<cnt2;i++)if(book[i]==bookmax)printf(" %d",i+1);putchar('\n');}return EXIT_SUCCESS; }

比對(duì)學(xué)生答案的字符串與標(biāo)準(zhǔn)字符串是否一致即可。


1059C語(yǔ)言競(jìng)賽

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<math.h> //#define HOST bool check(int num) {int i;for(i=2;i<=(int)sqrt(num);i++)if(num%i==0)break;if(i>(int)sqrt(num))return true;return false; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,ID[10005]={0}; scanf("%d",&cnt);for(int i=1;i<=cnt;i++){int temp;scanf("%d",&temp);ID[temp]=i; }scanf("%d",&cnt);while(cnt--){int temp;scanf("%d",&temp);if(!ID[temp])printf("%04d: Are you kidding?\n",temp);else if(ID[temp]==-1)printf("%04d: Checked\n",temp);else{if(ID[temp]==1)printf("%04d: Mystery Award\n",temp);else if(check(ID[temp]))printf("%04d: Minion\n",temp);elseprintf("%04d: Chocolate\n",temp);ID[temp]=-1;}}return EXIT_SUCCESS; }

so easy。


1060愛(ài)丁頓數(shù)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> //#define HOST int compare(const void *a,const void *b) {return *(const int*)b-*(const int*)a; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt; scanf("%d",&cnt);int array[100005];for(int i=0;i<cnt;i++)scanf("%d",&array[i]);qsort(array,cnt,sizeof(int),compare);int i;for(i=0;i<cnt;i++)if(array[i]<=i+1){printf("%d\n",i);break;}if(i==cnt)printf("%d\n",i);return EXIT_SUCCESS; }

遞減排序后,遍歷查找第一個(gè)不符合 array[i] > i+1 的位置輸出即可。不要忘記全都滿足的情況,測(cè)試點(diǎn)3就是此情況。


1061判斷題

#include<stdio.h> #include<stdlib.h> //#define HOST _Bool ans[105]; int score[105]={0}; int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint stnum,tinum;scanf("%d%d",&stnum,&tinum);for(int i=1;i<=tinum;i++)scanf("%d",&score[i]);for(int i=1;i<=tinum;i++)scanf("%hd",&ans[i]);while(stnum--){int temp,sum=0;for(int i=1;i<=tinum;i++){scanf("%d",&temp);if(temp==ans[i])sum+=score[i];}printf("%d\n",sum);}return EXIT_SUCCESS; }

so so so so easy。


1062最簡(jiǎn)分?jǐn)?shù)

#include<stdio.h> #include<stdlib.h> #include<math.h> #include<stdbool.h> //#define HOST int gcd(int m,int n) {return (m%n?(gcd(n,m%n)):(n)); } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint zi1,zi2,mu1,mu2,aim;scanf("%d/%d",&zi1,&mu1);scanf("%d/%d",&zi2,&mu2);scanf("%d",&aim);double qzi1=(zi1*((double)aim/(double)mu1));double qzi2=(zi2*((double)aim/(double)mu2));if(qzi1>qzi2){double temp=qzi1;qzi1=qzi2;qzi2=temp;}zi1=(int)floor(qzi1);zi2=(int)ceil(qzi2);bool ok=false;for(int i=zi1+1;i<zi2;i++){int temp=gcd(i,aim);if(temp==1)if(ok==false)printf("%d/%d",i,aim),ok=true;elseprintf(" %d/%d",i,aim);}putchar('\n');return EXIT_SUCCESS; }

小坑。注意是兩分?jǐn)?shù)之間,并不包括兩分?jǐn)?shù)。


1063計(jì)算譜半徑

#include<stdio.h> #include<stdlib.h> #include<math.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,a,b;double maxp=0.0;scanf("%d",&cnt);while(cnt--){scanf("%d%d",&a,&b);double temp=sqrt(a*a+b*b);if(temp>maxp)maxp=temp; }printf("%.2lf\n",maxp);return EXIT_SUCCESS; }

so so so so easy。


1064朋友數(shù)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> //#define HOST int getsum(int num) {int sum=0;while(num){sum+=num%10;num/=10;}return sum; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,ind=0;scanf("%d",&cnt);bool sp[50]={false};while(cnt--){int temp;scanf("%d",&temp);temp=getsum(temp);if(sp[temp]==false){sp[temp]=true;ind++;}}printf("%d\n",ind);bool ok=false;for(int i=0;i<50;i++)if(sp[i])if(ok==false)printf("%d",i),ok=true;elseprintf(" %d",i);putchar('\n');return EXIT_SUCCESS; }

so so so so easy。


1065單身狗

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> //#define HOST int couple[1000000]={0}; int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,sum=0;scanf("%d",&cnt);while(cnt--){int a,b;scanf("%d%d",&a,&b);couple[a]=b+1;couple[b]=a+1;}scanf("%d",&cnt);while(cnt--){int temp;scanf("%d",&temp);if(couple[temp]>0)couple[temp]=0;elsecouple[temp]=-1,sum++;}for(int i=0;i<=99999;i++)if(couple[i]>0&&couple[couple[i]-1]==0)couple[couple[i]-1]=-1,sum++;bool ok=false;printf("%d\n",sum);for(int i=0;i<=99999;i++)if(couple[i]==-1)if(ok==false)printf("%05d",i),ok=true;elseprintf(" %05d",i);return EXIT_SUCCESS; }

微坑。一個(gè)單身狗都沒(méi)有時(shí),單身狗ID行應(yīng)為空,所以不能在末尾加回車(chē)。


1066圖像過(guò)濾

#include<stdio.h> #include<stdlib.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint m,n,left,right,replace;scanf("%d%d%d%d%d",&m,&n,&left,&right,&replace);for(int i=0;i<m;i++)for(int j=0;j<n;j++){int temp;scanf("%d",&temp);if(temp>=left&&temp<=right)temp=replace;printf("%03d%c",temp,j==n-1?'\n':' ');}return EXIT_SUCCESS; }

so so so so easy。


1067試密碼

#include<stdio.h> #include<stdlib.h> #include<string.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt;char ans[25]={0};scanf("%s",ans);scanf("%d",&cnt);while(cnt){char temp[250]={0};scanf("%*c%[^\n]",temp);if(temp[0]=='#'&&strlen(temp)==1)break;if(!strcmp(ans,temp)){printf("Welcome in\n");break;}printf("Wrong password: %s\n",temp);cnt--;}if(!cnt)printf("Account locked\n");return EXIT_SUCCESS; }

坑。有幾個(gè)需要注意的地方:1.用戶嘗試輸入的密碼大小不確定,稍微開(kāi)大點(diǎn);2.用戶嘗試輸入的密碼會(huì)包含空白字符;3.輸入只有 ‘ # ’ 的時(shí)候退出……不能之判斷第一個(gè)字符。


1068萬(wàn)綠叢中一點(diǎn)紅

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> //#define HOST int m,n,limit; int matrix[1005][1005]={0}; bool check(int i,int j) {const int move[8][2]={{-1,-1},{-1,0},{-1,1},{1,-1},{1,0},{1,1},{0,-1},{0,1}};for(int k=0;k<8;k++){int tx=move[k][0]+i;int ty=move[k][1]+j;if(ty<0||ty>=n||tx<0||tx>=m)continue;if(abs(matrix[tx][ty]-matrix[i][j])<=limit)return false;}return true; } bool unique(int num,int x0,int y0) {for(int i=0;i<m;i++)for(int j=0;j<n;j++){if(i==x0&&j==y0)continue;if(matrix[i][j]==num)return false;}return true; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifscanf("%d%d%d",&n,&m,&limit);for(int i=0;i<m;i++)for(int j=0;j<n;j++)scanf("%d",&matrix[i][j]);int sum=0,spi,spj;for(int i=0;i<m;i++)for(int j=0;j<n;j++)if(check(i,j)&&unique(matrix[i][j],i,j))sum++,spi=i,spj=j;if(sum==0)printf("Not Exist\n");else if(sum>1)printf("Not Unique\n");elseprintf("(%d, %d): %d\n",spj+1,spi+1,matrix[spi][spj]);return EXIT_SUCCESS; }

沒(méi)有C++的map容器,又開(kāi)不了那么大的數(shù)組,只能挨個(gè)確定唯一性,好在數(shù)據(jù)并不大。先確認(rèn)差值符合再確定唯一性會(huì)快一些。


1069微博轉(zhuǎn)發(fā)抽獎(jiǎng)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h> //#define HOST char queue[1005][25]={0}; int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,jump,begin,sp=0;scanf("%d%d%d",&cnt,&jump,&begin);for(int i=1;i<=cnt;i++){char temp[25]={0};scanf("%s",temp);if(i==begin){bool go=false;for(int j=0;j<sp;j++)if(!strcmp(temp,queue[j])){begin++;go=true;break;}if(go)continue;begin+=jump;printf("%s\n",temp);strcpy(queue[sp++],temp);}}if(!sp)printf("Keep going...\n");return EXIT_SUCCESS; }

so easy。


1070結(jié)繩

#include<stdio.h> #include<stdlib.h> //#define HOST int compare(const void *a,const void *b) {return *(const int*)a-*(const int*)b; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt; scanf("%d",&cnt);int array[10005]={0};for(int i=1;i<=cnt;i++)scanf("%d",&array[i]);qsort(array+1,cnt,sizeof(int),compare);double lenth=(double)array[1];for(int i=2;i<=cnt;i++)lenth=lenth/2.0+array[i]/2.0;printf("%d\n",(int)lenth);return EXIT_SUCCESS; }

想要取到所有繩子的最大長(zhǎng)度,要保證最長(zhǎng)的繩子減半的次數(shù)最少。排序后計(jì)算便是。


1071小賭怡情

#include<stdio.h> #include<stdlib.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint all,cnt;scanf("%d%d",&all,&cnt);while(cnt--){int a,b,sp,push;scanf("%d%d%d%d",&a,&sp,&push,&b);if(push>all){printf("Not enough tokens. Total = %d.\n",all);continue;}if((!sp&&a>b)||(sp&&a<b)){all+=push;printf("Win %d! Total = %d.\n",push,all);}if((sp&&a>b)||(!sp&&a<b)){all-=push;printf("Lose %d. Total = %d.\n",push,all);}if(all<=0){printf("Game Over.\n");break;}}return EXIT_SUCCESS; }

so so easy。


1072開(kāi)學(xué)寄語(yǔ)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,items; scanf("%d%d",&cnt,&items);bool item[10000]={false};while(items--){int temp;scanf("%d",&temp);item[temp]=true;}int stu=0,goods=0;while(cnt--){char name[10]={0};int index,book[10]={0},z=0;scanf("%s%d",name,&index);while(index--){int temp;scanf("%d",&temp);if(item[temp]){book[z++]=temp;goods++;}}if(z){stu++;printf("%s:",name);for(int i=0;i<z;i++)printf(" %04d",book[i]);putchar('\n');}}printf("%d %d\n",stu,goods);return EXIT_SUCCESS; }

so so easy。


1073多選題常見(jiàn)計(jì)分法

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<stdbool.h> #define Max(a,b) (a>b?(a):(b)) //#define HOST typedef struct {int score;int anssum;int anscnt;bool ans[6]; }subject; int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt1,cnt2;scanf("%d%d",&cnt1,&cnt2);subject sp[105];for(int i=0;i<cnt2;i++){scanf("%d%d%d",&sp[i].score,&sp[i].anssum,&sp[i].anscnt);for(int j=0;j<sp[i].anssum;j++)sp[i].ans[j]=false;for(int j=0;j<sp[i].anscnt;j++){char temp;scanf("%*c%c",&temp);sp[i].ans[temp-'a']=true;}}int book[105][6]={0},bookmax=0;while(cnt1--){double sum=0.0;for(int i=0;i<cnt2;i++){while(getchar()!='(');int xuan;char xuanans[6]={0};bool zero=false;scanf("%d",&xuan);for(int j=0;j<sp[i].anssum;j++)if(sp[i].ans[j]==true)book[i][j]++;for(int j=0;j<xuan;j++){char temp;scanf("%*c%c",&temp);if(sp[i].ans[temp-'a']==true)book[i][temp-'a']--;else{zero=true;book[i][temp-'a']++;}}getchar();if(xuan==sp[i].anscnt&&zero==false)sum+=(double)sp[i].score;else if(xuan!=sp[i].anscnt&&zero==false)sum+=(double)sp[i].score/2.0;}printf("%.1lf\n",sum);}for(int i=0;i<cnt2;i++)for(int j=0;j<6;j++)bookmax=Max(bookmax,book[i][j]);if(!bookmax)printf("Too simple\n");else{for(int i=0;i<cnt2;i++)for(int j=0;j<6;j++)if(book[i][j]==bookmax)printf("%d %d-%c\n",bookmax,i+1,j+'a');}return EXIT_SUCCESS; }

一道很麻煩的模擬題,由 1058 改編而成。需注意錯(cuò)題不單單是錯(cuò)誤的選項(xiàng),對(duì)的選項(xiàng)沒(méi)選也算錯(cuò)誤。


1074宇宙無(wú)敵加法器

#include<stdio.h> #include<stdlib.h> #include<string.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifchar biao[20]={0};char biga[20]={0};char bigb[20]={0};char ans[50]={0};scanf("%s%s%s",biao,biga,bigb);int lenbiao=strlen(biao),lena=strlen(biga),lenb=strlen(bigb);int index=0;while(index<lena||index<lenb){int a,b,c;if(index>=lena)a=0;elsea=biga[lena-index-1]-'0';if(index>=lenb)b=0;elseb=bigb[lenb-index-1]-'0';if(biao[lenbiao-index-1]=='0')c=10;elsec=biao[lenbiao-index-1]-'0';ans[index]+=a+b;if(ans[index]>=c){ans[index]-=c;ans[index+1]++;}ans[index++]+='0';}if(ans[index])ans[index]+='0';elseindex--;while(ans[index]=='0')index--;for(int i=index;i>=0;i--)putchar(ans[i]);if(index<0)putchar('0'); putchar('\n');return EXIT_SUCCESS; }

小坑。結(jié)果是 0 的時(shí)候確保輸出一個(gè) 0 。


1075鏈表元素分類(lèi)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> //#define HOST struct {int data,next; }node[100005]; int arr[100005][3]={0}; int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint st,n,k,ip;scanf("%d%d%d",&st,&n,&k);for(int i=0;i<n;i++){scanf("%d",&ip);scanf("%d%d",&node[ip].data,&node[ip].next);}int point=st,index[3]={0};while(point!=-1){int data=node[point].data;if(data<0)arr[index[0]++][0]=point;else if(data>=0&&data<=k)arr[index[1]++][1]=point;elsearr[index[2]++][2]=point;point=node[point].next;}bool fb=true;for(int i=0;i<3;i++){for(int j=0;j<index[i];j++){if(fb){printf("%05d %d ",arr[j][i],node[arr[j][i]].data);fb=false;}elseprintf("%05d\n%05d %d ",arr[j][i],arr[j][i],node[arr[j][i]].data); }}printf("-1");return EXIT_SUCCESS; }

存儲(chǔ)鏈表后,從鏈表頭開(kāi)始遍歷依次存下 <0、0<=&&<=k、>k 的地址。

按上面的順序依次輸出地址和數(shù)據(jù)。


1076Wifi密碼

#include<stdio.h> #include<stdlib.h> #include<ctype.h> int main(int argc,char **argv) {int cnt,ins;scanf("%d",&cnt);int ans[105]={0};for(ins=0;ins<cnt;ins++){char alpha,is='F';while(is!='T')scanf("%*c%c-%c",&alpha,&is);ans[ins]=alpha-'A'+1;}for(cnt=0;cnt<ins;cnt++)putchar('0'+ans[cnt]);putchar('\n');return EXIT_SUCCESS;}

so so so easy。


1077互評(píng)成績(jī)計(jì)算

#include<stdio.h> #include<stdlib.h> #include<math.h> #define Max(a,b) (a<b?(b):(a)) #define Min(a,b) (a<b?(a):(b)) //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,maxs;scanf("%d%d",&cnt,&maxs);for(int i=1;i<=cnt;i++){int teacher,max=0,min=1<<30,sum=0,div=cnt-3;scanf("%d",&teacher);for(int j=1;j<cnt;j++){int temp;scanf("%d",&temp);if(temp<0||temp>maxs){div--;continue;}sum+=temp;max=Max(max,temp);min=Min(min,temp);}sum-=max;sum-=min;sum=(int)round(((double)sum/div+(double)teacher)/2.0);printf("%d\n",sum);}return EXIT_SUCCESS; }

so so so easy。


1078字符串壓縮與解壓

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h> #include<ctype.h> //#define HOST void ya(char *str) {int i=0,len=strlen(str),nowlen=0;char sp=str[0];while(i<len){if(sp==str[i]){nowlen++;}else{if(nowlen>1)printf("%d",nowlen);putchar(sp);nowlen=1;sp=str[i];}i++;}if(nowlen>1)printf("%d",nowlen);putchar(sp);return; } void jie(char *str) {int i=0,len=strlen(str);char sp,temp;while(i<len){sp=str[i];if(isdigit(sp)){i++;int num=sp-'0';while(isdigit(str[i])){num=num*10+str[i]-'0';i++;}temp=str[i];for(int k=1;k<=num;k++)putchar(temp);}elseputchar(sp);i++;}return; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifchar ch,str[1005]={0};ch=getchar();scanf("%*c%[^\n]%*c",str);if(ch=='C')ya(str);elsejie(str);putchar('\n');return EXIT_SUCCESS; }

so so easy。上學(xué)期ACM校賽的一個(gè)簽到題。


1079延遲的回文數(shù)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h> //#define HOST bool check(char *num) {int left=0,right=strlen(num)-1;while(left<right){if(num[left]!=num[right])return false;left++;right--;}return true; } char* transform(char *num) {static char spnum[1200]={0};int left=0,right=strlen(num)-1,index=0;for(int i=right;i>=left;i--)spnum[index++]=num[i];return spnum; } char* Bigadd(char *num1,char *num2) {int len=strlen(num1),i,j;static char sumnum[1200]={0};memset(sumnum,0,sizeof(sumnum));for(i=len;i>0;i--){sumnum[i]+=num1[i-1]+num2[i-1]-2*'0';if(sumnum[i]>=10){sumnum[i-1]++;sumnum[i]-=10;}}if(sumnum[0])i=1;for(j=0;j<=len;j++)sumnum[j]+='0';sumnum[j]=0;//printf(">>>%s %d\n",sumnum,i);if(!i)return (sumnum+1);return sumnum; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt=10;char num[1200]={0};scanf("%s",num);if(check(num))printf("%s is a palindromic number.\n",num);else{ while(cnt--){char *temp1=transform(num); char *temp2=Bigadd(num,temp1);printf("%s + %s = %s\n",num,temp1,temp2);strcpy(num,temp2);if(check(temp2))break;}if(cnt>-1)printf("%s is a palindromic number.\n",num);elseprintf("Not found in 10 iterations.\n");}return EXIT_SUCCESS; }

大整數(shù)高精度運(yùn)算這塊總是寫(xiě)的很麻煩。。重復(fù)的翻轉(zhuǎn)總怕出錯(cuò)。


1080MOOC期終成績(jī)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h> #include<math.h> //#define HOST typedef struct {char name[25];int sum,gp,gm,gf; }student; typedef struct {char name[25];int gnum; }studentcopy; student sp[10005]={0}; studentcopy sp2[10005]={0},sp3[10005]={0}; void getsp(int cnt1,int cnt2,int cnt3) {int ks=0,ls=0;for(int i=0;i<cnt1;i++){while(strcmp(sp[i].name,sp2[ks].name)>0&&ks<cnt2)ks++;while(strcmp(sp[i].name,sp3[ls].name)>0&&ls<cnt3)ls++;sp[i].gm=-1;if(strcmp(sp[i].name,sp2[ks].name)==0)sp[i].gm=sp2[ks].gnum;if(strcmp(sp[i].name,sp3[ls].name)==0)sp[i].gf=sp3[ls].gnum;if(sp[i].gm>sp[i].gf)sp[i].sum=(int)round(0.4*sp[i].gm+0.6*sp[i].gf);elsesp[i].sum=sp[i].gf;} } int compare(const void *a,const void *b) {const student *sa=(const student*)a;const student *sb=(const student*)b;if(sa->sum==sb->sum)return strcmp(sa->name,sb->name);return sb->sum-sa->sum; } int comforsp(const void *a,const void *b) {const student *sa=(const student*)a;const student *sb=(const student*)b;return strcmp(sa->name,sb->name); } int comforcopy(const void *a,const void *b) {const studentcopy *sa=(const studentcopy*)a;const studentcopy *sb=(const studentcopy*)b;return strcmp(sa->name,sb->name); } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt1,cnt2,cnt3;scanf("%d%d%d",&cnt1,&cnt2,&cnt3);char str[25]={0};int index1=0,index2=0,index3=0;while(cnt1--){int temp;scanf("%s%d",sp[index1].name,&temp);if(temp>=200)sp[index1++].gp=temp;}while(cnt2--){scanf("%s%d",sp2[index2].name,&sp2[index2].gnum);index2++;}while(cnt3--){scanf("%s%d",sp3[index3].name,&sp3[index3].gnum);index3++;}qsort(sp,index1,sizeof(student),comforsp);qsort(sp2,index2,sizeof(studentcopy),comforcopy);qsort(sp3,index3,sizeof(studentcopy),comforcopy);getsp(index1,index2,index3);qsort(sp,index1,sizeof(student),compare);for(int i=0;i<index1;i++){if(sp[i].sum>=60){printf("%s",sp[i].name);printf(" %d",sp[i].gp);if(sp[i].gm!=-1)printf(" %d",sp[i].gm);elseprintf(" -1");printf(" %d",sp[i].gf);printf(" %d\n",sp[i].sum);}}return EXIT_SUCCESS; }

坑坑坑坑坑坑坑坑坑坑!!!坑到爆炸!

純C處理這種大規(guī)??芍貜?fù)數(shù)據(jù)真的是太麻煩了,直接線性搜索名稱最后一個(gè)測(cè)試點(diǎn)穩(wěn)穩(wěn)地超時(shí)。

解決方法是多開(kāi)兩個(gè)結(jié)構(gòu)體數(shù)組用來(lái)存儲(chǔ)期中、期末考試成績(jī),以 >=200分 的上機(jī)成績(jī)作為參考,排序三個(gè)成績(jī)的名稱后,按順序補(bǔ)全作為結(jié)果的結(jié)構(gòu)體數(shù)組中的期中、期末成績(jī)。

我的想法是找到同名的就把成績(jī)復(fù)制過(guò)去,沒(méi)成績(jī)的就是 0 ,最后輸出的時(shí)候過(guò)濾總成績(jī) <60 分的,期中考試是 0 的輸出 -1 就是了。

結(jié)果。。最后一個(gè)測(cè)試點(diǎn)一直是WA??折騰了老一番,怎么改都不對(duì)。。

吃了頓飯冷靜了下,發(fā)現(xiàn)期中考試會(huì)有家伙參加考試,然后考了個(gè) 0 分的。。。

2333,長(zhǎng)教訓(xùn)了,算是自己邏輯不周吧。。

另>>:做出來(lái)竟然比用STL庫(kù) map 快。


1081檢查密碼

#include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<string.h> int main(int argc,char **argv) {int cnt,inx;scanf("%d",&cnt);while(cnt--){char str[100]={0};scanf("%*c%[^\n]",str);if(strlen(str)<6){printf("Your password is tai duan le.\n");continue;}int h1=0,h2=0,flag=0;for(inx=0;inx<strlen(str);inx++){if(!(isalnum(str[inx])||str[inx]=='.')){printf("Your password is tai luan le.\n");flag=1;break;}if(isalpha(str[inx]))h1=1;if(isdigit(str[inx]))h2=1; }if(flag)continue;if(h1==0&&h2==1)printf("Your password needs zi mu.\n");if(h2==0&&h1==1)printf("Your password needs shu zi.\n");if(h1==1&&h2==1)printf("Your password is wan mei.\n");}return EXIT_SUCCESS; }

小坑,密碼串可能有空格。


1082射擊比賽

#include<stdio.h> #include<stdlib.h> #include<stdint.h> #define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt; scanf("%d",&cnt);int bestID,worseID,bs=INT32_MAX,ws=0;while(cnt--){int temp,x,y;scanf("%d%d%d",&temp,&x,&y);x=x*x+y*y;if(x>ws){ws=x;worseID=temp;}if(x<bs){bs=x;bestID=temp;}} printf("%04d %04d\n",bestID,worseID); return EXIT_SUCCESS; }

so so so so easy。


1083是否存在相等的差

#include<stdio.h> #include<stdlib.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,arr[10005]={0}; scanf("%d",&cnt);for(int i=1;i<=cnt;i++){int temp;scanf("%d",&temp);arr[abs(temp-i)]++;}for(int i=10000;i>=0;i--)if(arr[i]>1)printf("%d %d\n",i,arr[i]);return EXIT_SUCCESS; }

so so so so easy。


1084外觀數(shù)列

#include<stdio.h> #include<stdlib.h> #include<string.h> //#define HOST char* tran(char* arr,int len) {static char q[100000]={0};memset(q,0,sizeof(q));int index=0,isp=0,sp=0,take=arr[0];while(index<len){if(take==arr[index])sp++;else{q[isp++]=take;int left=isp,right=isp-1;while(sp){q[isp++]=sp%10+'0';sp/=10;right++;}while(left<right){int temp=q[left];q[left]=q[right];q[right]=temp;left++,right--;}take=arr[index];sp=1;}index++;}q[isp++]=take;int left=isp,right=isp-1;while(sp){q[isp++]=sp%10+'0';sp/=10;right++; }while(left<right){int temp=q[left];q[left]=q[right];q[right]=temp;left++,right--;}return q; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,k;char array[100000]={0};scanf("%d%d",&cnt,&k);array[0]=cnt+'0';for(int i=1;i<k;i++){char *point=tran(array,strlen(array)); strcpy(array,point); //printf("%d>>%s\n",i+1,array);}printf("%s\n",array); return EXIT_SUCCESS; }

不能小看 N 最大只有 40 ,d=2 N=40 的時(shí)候,上萬(wàn)位都打不住。


1085PAT單位排行

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> #include<math.h> //#define HOST typedef struct {char isp;double score;char name[20];int stnum,iscore; }unit; unit sp[100005]={0},ans[100005]={0}; int namecompare(const void *a,const void *b) {const unit *sa=(const unit*)a;const unit *sb=(const unit*)b;return strcmp(sa->name,sb->name); } int anscompare(const void *a,const void *b) {const unit *sa=(const unit*)a;const unit *sb=(const unit*)b;if(sa->iscore==sb->iscore){if(sa->stnum==sb->stnum)return strcmp(sa->name,sb->name);return sa->stnum-sb->stnum;}return sb->iscore-sa->iscore; } void ges(char mode,double *to,double *from) {if(mode=='T')*to+=*from*1.5;if(mode=='A')*to+=*from;if(mode=='B')*to+=*from/1.5;return; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,index=0; scanf("%d",&cnt);while(cnt--){char ch,temp[10]={0};while((ch=getchar())=='\n');sp[index].isp=ch;scanf("%*s");scanf("%lf",&sp[index].score);scanf("%s",temp);for(int i=0;i<strlen(temp);i++)temp[i]=tolower(temp[i]);strcpy(sp[index].name,temp);index++;}qsort(sp,index,sizeof(unit),namecompare);int ind=0,jnd=0;while(jnd<index){strcpy(ans[ind].name,sp[jnd].name);ans[ind].stnum=1;ges(sp[jnd].isp,&ans[ind].score,&sp[jnd].score);ind++,jnd++;int cut=1;while(jnd<index&&(!strcmp(ans[ind-cut].name,sp[jnd].name))){ans[ind-cut].stnum++;ges(sp[jnd].isp,&ans[ind-cut].score,&sp[jnd].score);jnd++;if(jnd>=index)break;}ans[ind-1].iscore=(int)floor(ans[ind-1].score);}qsort(ans,ind,sizeof(unit),anscompare);int qt=0,diff=-1,qr=1;printf("%d\n",ind);for(int i=0;i<ind;i++){if(diff!=ans[i].iscore){diff=ans[i].iscore; qt+=qr;qr=1;}elseqr++;printf("%d %s %d %d\n",qt,ans[i].name,ans[i].iscore,ans[i].stnum);}return EXIT_SUCCESS; }

C語(yǔ)言雞肋的時(shí)候到了,什么輔助數(shù)據(jù)結(jié)構(gòu)也沒(méi)有,只能用結(jié)構(gòu)體數(shù)組從頭構(gòu)建。處理加權(quán)分?jǐn)?shù)的時(shí)候最后轉(zhuǎn)成整形變量,后面的排序輸出會(huì)方便很多,還不會(huì)出莫名其妙的錯(cuò)誤。


1086就不告訴你

#include<stdio.h> #include<stdlib.h> //#define HOST void print(int num) {while(num%10==0)num/=10;while(num){putchar(num%10+'0');num/=10;}putchar('\n');return; } int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint a,b;scanf("%d%d",&a,&b);print(a*b); return EXIT_SUCCESS; }

so so so so easy。


1087有多少不同的值

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,sum=0;int book[10400]={false};scanf("%d",&cnt);for(int i=1;i<=cnt;i++){int index=i/2+i/3+i/5;if(book[index]==false){sum++;book[index]=true;}}printf("%d\n",sum); return EXIT_SUCCESS; }

so so so so easy。


1088三人行

#include<stdio.h> #include<stdlib.h> #include<math.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint my,x,y;scanf("%d%d%d",&my,&x,&y);for(int jia=99;jia>=10;jia--){int yi=jia%10*10+jia/10;double bing=(double)yi/(double)y;if(fabs(bing-(fabs((double)jia-(double)yi))/x)<1e-6){printf("%d",jia);if(jia>my)printf(" Cong");if(jia==my)printf(" Ping");if(jia<my)printf(" Gai");if(yi>my)printf(" Cong");if(yi==my)printf(" Ping");if(yi<my)printf(" Gai");if(bing>my)printf(" Cong\n");if(bing==my)printf(" Ping\n");if(bing<my)printf(" Gai\n");return EXIT_SUCCESS; }}printf("No Solution\n");return EXIT_SUCCESS; }

so easy。


1089狼人殺-簡(jiǎn)單版

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h> //#define HOST int main(int argc,char **argv) {#ifdef HOSTfreopen("input.txt","r",stdin);#endifint cnt,index,book[105]={0},sp[105]={0},ans[105];bool get=true;scanf("%d",&cnt);for(int i=1;i<=cnt;i++)scanf("%d",&book[i]);for(int i=1;i<cnt;i++){for(int j=i+1;j<=cnt;j++){memset(sp,0,sizeof(sp));sp[i]=sp[j]=-1;ans[0]=ans[1]=0;index=0;for(int k=1;k<=cnt;k++){if((sp[abs(book[k])]==0&&book[k]<0)||(sp[book[k]]==-1&&book[k]>0))ans[index++]=k;}if(index==2&&(sp[ans[0]]==0&&sp[ans[1]]==-1||sp[ans[1]]==0&&sp[ans[0]]==-1)){printf("%d %d\n",i,j);get=false;break;}}if(get==false)break;}if(get)printf("No Solution\n");return EXIT_SUCCESS; }

枚舉法。先嘗試了下枚舉撒謊的,發(fā)現(xiàn)很難判斷是否正確的說(shuō)出了狼人是哪兩個(gè),折騰半天失敗告終…555…555…

枚舉狼人就很簡(jiǎn)單了,誰(shuí)說(shuō)得和預(yù)設(shè)狼人不符,那么說(shuō)的就是假話。再判斷下是不是只有一個(gè)狼人說(shuō)了假話就是了。


1090危險(xiǎn)品裝箱

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> int sp[100000][105]={0}; int main(int argc,char **argv) {int cnt1,cnt2;scanf("%d%d",&cnt1,&cnt2);while(cnt1--){int a,b;scanf("%d%d",&a,&b);sp[a][sp[a][0]+1]=b;sp[a][0]++;}while(cnt2--){bool book[100000]={false};int array[10001]={0};int cnt,pass=0;scanf("%d",&cnt);int num=0;while(cnt--){scanf("%d",&array[num]);for(int index=1;index<=sp[array[num]][0];index++)book[sp[array[num]][index]]=true;num++;}for(int i=0;i<num;i++)if(book[array[i]])pass=1;if(pass)printf("No\n");elseprintf("Yes\n");}return EXIT_SUCCESS; }

用二維數(shù)組先存儲(chǔ)每個(gè)編號(hào)對(duì)應(yīng)的若干個(gè)編號(hào),sp[編號(hào)][0]存儲(chǔ)總共對(duì)應(yīng)著幾個(gè)。

用布爾數(shù)組統(tǒng)計(jì)每個(gè)輸入的所有不相容編號(hào),之后查詢?nèi)绻忻茌敵鯪o,否則Yes。

看了看其他人做的,大多用的STL容器,自己對(duì)STL庫(kù)的掌握還需要努力啊……


>>以下5題為2018/12/09PAT參賽時(shí)所寫(xiě)


1091N-自守?cái)?shù)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h> #include<math.h> bool check(long long a,int b) {int ts=0;if(b/10==0)ts=1;else if(b/100==0)ts=2;elsets=3;int isp=a%(int)pow(10,ts);if(isp==b)return true;return false; } int main(int argc,char **argv) {//freopen("test.txt","r",stdin);int cnt;scanf("%d",&cnt);while(cnt--){int temp;bool jump=false;scanf("%d",&temp);int i,j;for(i=1;i<10;i++){long long sp=(long long)i*temp*temp;if(check(sp,temp)){printf("%d %lld\n",i,sp);break;}}if(i==10)printf("No\n");}return EXIT_SUCCESS; }

so easy

1092最好吃的月餅

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> int mat[1005]={0}; int max[1005]={0}; int maxmoon=0; int main(int argc, char *argv[]) {int cnt,city,sp=0;scanf("%d%d",&cnt,&city);int is,js,i;for(is=1;is<=city;is++){for(js=1;js<=cnt;js++){if(is==1)scanf("%d",&mat[js]);else{int temp;scanf("%d",&temp);mat[js]+=temp;}}}for(js=1;js<=cnt;js++){if(mat[js]>maxmoon){maxmoon=mat[js];sp=0;max[sp++]=js;}else if(mat[js]==maxmoon){max[sp++]=js;}}printf("%d\n",maxmoon);for(i=0;i<sp;i++)printf("%d%c",max[i],i==sp-1?'\n':' ');return 0; }

統(tǒng)計(jì)每個(gè)城市的和,取最大值遍歷。

1093字符串A+B

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h> char str1[1000005]={0}; short int sp[128]={0}; char str2[1000005]={0}; int main(int argc, char *argv[]) {//freopen("test.txt","r",stdin);scanf("%[^\n]%*c",str1);scanf("%[^\n]%*c",str2);int i;for(i=0;i<strlen(str1);i++){int temp=str1[i];if(sp[temp]==0)sp[temp]=1;else if(sp[temp]==1)sp[temp]=2;}for(i=0;i<strlen(str2);i++){int temp=str2[i];if(sp[temp]==0)sp[temp]=1;else if(sp[temp]==1)sp[temp]=2;}for(i=0;i<strlen(str1);i++){int temp=str1[i];if(sp[temp]!=10){putchar(str1[i]);if(sp[temp]==2)sp[temp]=10;}}for(i=0;i<strlen(str2);i++){int temp=str2[i];if(sp[temp]!=10){putchar(str2[i]);if(sp[temp]==2)sp[temp]=10;}}putchar('\n');return 0; }

考試時(shí)寫(xiě)的有點(diǎn)兒亂,循環(huán)里的變量都定義在了外面,怕不支持C99。

統(tǒng)計(jì)出現(xiàn)兩次的字符,這些字符只能打印一次。

1094谷歌的招聘

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h> #include<math.h> int check(int num) {int i;if(num<2)return false;for(i=2;i<=(int)sqrt(num);i++){if(num%i==0)return false;}return true; } int getff(int num) {int i=0;while(num){num/=10;i++;}return i; } int main(int argc,char **argv) {//freopen("test.txt","r",stdin);int len,cnt;scanf("%d%d",&len,&cnt);char number[1005]={0};scanf("%s",number);int i,j;for(i=0;i<=len-cnt;i++){int temp=0;;for(j=0;j<cnt;j++){temp*=10;temp+=number[i+j]-'0';}if(check(temp)){int k;for(k=1;k<=cnt-getff(temp);k++)printf("0");printf("%d\n",temp);break;}}if(i==len-cnt+1)printf("404\n");return EXIT_SUCCESS; }

挨個(gè)取數(shù)字判斷是否為素?cái)?shù)即可。

小坑,不要忘了題目中說(shuō)的保留前導(dǎo)零。

1095解碼PAT準(zhǔn)考證

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h> typedef struct {char rank;int kid;int date;int mid;int score; }student; student sp[10005]={0}; int compare(const void *a,const void *b) {const student *sa=(const student*)a;const student *sb=(const student*)b;if(sa->score==sb->score){if(sa->rank==sb->rank){if(sa->kid==sb->kid){if(sa->date==sb->date){return sa->mid-sb->mid;}return sa->date-sb->date;}return sa->kid-sb->kid;}return sa->rank-sb->rank;}return sb->score-sa->score; } int main(int argc, char *argv[]) {//freopen("test.txt","r",stdin);int N,M;scanf("%d%d",&N,&M);int i;for(i=0;i<N;i++){char temp[20]={0};scanf("%s",temp);sscanf(temp,"%c%3d%6d%d",&sp[i].rank,&sp[i].kid,&sp[i].date,&sp[i].mid);scanf("%d",&sp[i].score);}qsort(sp,N,sizeof(student),compare);int j;for(j=1;j<=M;j++){int number,temp;char ctemp;scanf("%d",&number);switch(number){case 1:while((ctemp=getchar())==' ');printf("Case %d: %d %c\n",j,number,ctemp);{int i;bool isq=false;for(i=0;i<N;i++){if(sp[i].rank==ctemp){printf("%c%03d%06d%03d %d\n",sp[i].rank,sp[i].kid,sp[i].date,sp[i].mid,sp[i].score);isq=true; }}if(isq==false)printf("NA\n");}break;case 2:scanf("%d",&temp);printf("Case %d: %d %03d\n",j,number,temp);{int i,sumstu=0,sumscore=0;for(i=0;i<N;i++){if(sp[i].kid==temp){sumstu++;sumscore+=sp[i].score;}}if(!sumstu)printf("NA\n");elseprintf("%d %d\n",sumstu,sumscore);}break;case 3:scanf("%d",&temp);printf("Case %d: %d %06d\n",j,number,temp);{int i,ksp[1000]={0},max=0;bool isha=false;for(i=0;i<N;i++){if(sp[i].date==temp){isha=true;ksp[sp[i].kid]++;if(ksp[sp[i].kid]>max)max=ksp[sp[i].kid];}}for(i=max;i>0;i--){int j;for(j=101;j<=999;j++)if(ksp[j]==i){printf("%d %d\n",j,i);}}if(isha==false)printf("NA\n");}break;default:break;}}return 0; }

這次考試最麻煩的一道題,要求很多。

每個(gè)指令沒(méi)輸出都要輸出NA,所有前導(dǎo)零都不可省略。其他的正常來(lái)就是了。


END

總結(jié)

以上是生活随笔為你收集整理的PAT : PAT (Basic Level) Practice(中文)答案(1001 ~ 1095)(纯C编写)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。