题目集地址

报名了12月的PAT-B,先试试水。

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


更新:(2018/12/09)PAT乙级考试100分!

考试代码已更新

冬天坐火车跑去考试冻懵了,来年对战PAT甲级考试!


目录

目录

题目集地址

目录

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

1002写出这个数

1003我要通过!

1004成绩排名

1005继续(3n+1)猜想

1006换个格式输出整数

1007素数对猜想

1008数组元素循环右移问题

1009说反话

1010一元多项式求导

1011A+B 和 C

1012数字分类

1013数素数

1014福尔摩斯的约会

1015德才论

1016部分A+B

1017A除以B

1018锤子剪刀布

1019数字黑洞

1020月饼

1021个位数统计

1022D进制的A+B

1023组个最小数

1024科学计数法

1025反转链表

1026程序运行时间

1027打印沙漏

1028人口普查

1029旧键盘

1030完美数列

1031查验身份证

1032挖掘机技术哪家强

1033旧键盘打字

1034有理数四则运算

1035插入与归并

1036跟奥巴马一起编程

1037在霍格沃茨找零钱

1038统计同成绩学生

1039到底买不买

1040有几个PAT

1041考试座位号

1042字符统计

1043输出PATest

1044火星数字

1045快速排序

1046划拳

1047编程团体赛

1048数字加密

1049数列的片段和

1050螺旋矩阵

1051复数乘法

1052卖个萌

1053住房空置率

1054求平均值

1055集体照

1056组合数的和

1057数零壹

1058选择题

1059C语言竞赛

1060爱丁顿数

1061判断题

1062最简分数

1063计算谱半径

1064朋友数

1065单身狗

1066图像过滤

1067试密码

1068万绿丛中一点红

1069微博转发抽奖

1070结绳

1071小赌怡情

1072开学寄语

1073多选题常见计分法

1074宇宙无敌加法器

1075链表元素分类

1076Wifi密码

1077互评成绩计算

1078字符串压缩与解压

1079延迟的回文数

1080MOOC期终成绩

1081检查密码

1082射击比赛

1083是否存在相等的差

1084外观数列

1085PAT单位排行

1086就不告诉你

1087有多少不同的值

1088三人行

1089狼人杀-简单版

1090危险品装箱

>>以下5题为2018/12/09PAT参赛时所写

1091N-自守数

1092最好吃的月饼

1093字符串A+B

1094谷歌的招聘

1095解码PAT准考证

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写出这个数

#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我要通过!

#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;
} 

分析题目三个通过条件可知。字符串中不能出现P、A、T之外的字符;PT之间只有一个A时(PAT),前后可以加上相同个数的A;PT中每多一个A(>2),后面加上前面个数个A。

统计字符串中P、T前中后A的个数判断即可。


1004成绩排名

#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继续(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;
}

略坑。题目意思是第一个直接执行3n+1猜想,并记录过程中的每个数,注意是过程数;后面的每个数先判断是否已经记录过,记录过就直接跳过(记录过后面算就没意义了),没记录过就执行3n+1猜想并记录过程数。

再挨个判断每个数是否在记录中,记录中存在则输出。记录过程的数组开大点,4500左右。


1006换个格式输出整数

#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素数对猜想

#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;
}

挨个计算素数,判断当前值和上一个历史值之差是否为 2 。


1008数组元素循环右移问题

#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;
}

模拟实现汇编的 RR 。


1009说反话

#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;
}

记录每个单词的起始和终止位置。


1010一元多项式求导

#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;
}

小小小坑。存在负指数。


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数字分类

#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;
}

小小小坑,判断每一个情况是否有值。


1013数素数

#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福尔摩斯的约会

#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的范围不能用无脑直接用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;
}

编写compare函数借助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;
}

小坑,存在除数为 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。统计输赢情况。


1019数字黑洞

#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;
}

小坑。第二行第三行输入的库存和总价题目说明是正数,可以是小数的。


1021个位数统计

#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。统计各个数字出现个数输出。


1022D进制的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组个最小数

#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。第一个数从1开始取最小数,后面的数从零开始取。


1024科学计数法

#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;
}

先把输入处理成有效数字、正负号、指数值几部分,后根据指数正、负、零,分析输出即可。


1025反转链表

#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;
}

读取链表数据,转换成数组存储。逐一反转数组即可。


1026程序运行时间

#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。得到程序运行秒数后,四舍五入成整数后按格式输出。


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;
}

老题目,先计算好沙漏第一行字符个数和剩余值,循环输出即可。


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;
}

天坑。存在没有一个满足的人的情况(只输出一个 0 ),还需考虑只有一个满足的人的情况(最大最小输出同一个人的名字)。


1029旧键盘

#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完美数列

#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;
}

排序后循环查找最大可能值。


1031查验身份证

#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;
}

按所给计算方法判断是否通过。


1032挖掘机技术哪家强

#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旧键盘打字

#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;
}

记录第一个字符串出现字符,过滤第二个字符串。


1034有理数四则运算

#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。分成两部分,一部分是直接计算分子、分母值及格式输出;另一部分是化简分子、分母为要求的格式。


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;
}

考察插入排序和归并排序。一步一步进行插入/归并排序,如果出现与目标序列一致则输出排序种类,再进行一次对应排序后输出序列。


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在霍格沃茨找零钱

#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。单位转换。


1038统计同成绩学生

#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到底买不买

#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;
}

根据第一个字符串统计第二个字符串,多出/缺少的字符数。


1040有几个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;
}

每个A都可以和前面任意一个P配对,每个T都可以和前面任意一个PA配对。还需不断的取余。

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


1041考试座位号

#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。结构体数组存取。


1042字符统计

#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;
} 

将字母变成小写后,统计出现个数。逆序查找最大值。


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火星数字

#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;
}

花里胡哨版进制转换,用sscanf从字符串中读取可以简便许多。


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 的话,得到的输出应该是 0后面跟两个回车……测试点2就是输入为0。

其次,题目中说按递增顺序输出这些元素。意思是按原顺序输出,并不用递增排序。

于是跑一遍左侧最大值、右侧最小值,选择满足要求的输出就完事了……


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编程团体赛

#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数字加密

#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;
} 

天坑!题目并没有说明白数字A可能比数字B长,测试点2和5就是数字A比数字B长的情况,这时需要短的数字补零。

显而易见的做法是反转字符串,然后把短的补零,再逐位计算。

。。然而我并不想写reverse函数。

1.判断哪个数字长,指针指向长的数字。

2.两数字从个位开始逐位计算,如果有一个数字的索引 <0 则去值为 ‘0’ 。

3.输出指针所指的字符串。


1049数列的片段和

#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;
}

每个数出现的个数是(左边数的个数+1)*(右边数的个数+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函数竟然会导致运行时错误。。肯能是PAT这里只能申请堆内存不能释放??

没有说明N的大小范围,须动态申请内存空间。


1051复数乘法

#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 的问题,应是 +0.0 。


1052卖个萌

#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;
}

小坑。不知道是不是编码类型不对,在笔记本上运行读取不了貌似是日语的字符。一开始用扫描集读取一行也失败了,失败原因应该就是日语字符读取失败直接退出了。


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;
} 

坑!题目中说的是“ 若观察期超过某给定阈值 ”,并不是低于电量低于某给定的阈值e的天数…

看题的时候想当然了,理解错的话测试点1,2就会过不去。


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;
}

一上来就想用个sscanf骚操作。。一番操作浪费了一个多小时……

然后老老实实的先判断再 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;
} 

从高到低+字典序升序排列后,每一行安排好对应位置的编号,再依次输出即可。


1056组合数的和

#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数零壹

#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;
} 

比对学生答案的字符串与标准字符串是否一致即可。


1059C语言竞赛

#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爱丁顿数

#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;
}

递减排序后,遍历查找第一个不符合 array[i] > i+1 的位置输出即可。不要忘记全都满足的情况,测试点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最简分数

#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;
}

小坑。注意是两分数之间,并不包括两分数。


1063计算谱半径

#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朋友数

#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;
}

微坑。一个单身狗都没有时,单身狗ID行应为空,所以不能在末尾加回车。


1066图像过滤

#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;
}

坑。有几个需要注意的地方:1.用户尝试输入的密码大小不确定,稍微开大点;2.用户尝试输入的密码会包含空白字符;3.输入只有 ‘ # ’ 的时候退出……不能之判断第一个字符。


1068万绿丛中一点红

#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;
}

没有C++的map容器,又开不了那么大的数组,只能挨个确定唯一性,好在数据并不大。先确认差值符合再确定唯一性会快一些。


1069微博转发抽奖

#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结绳

#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;
}

想要取到所有绳子的最大长度,要保证最长的绳子减半的次数最少。排序后计算便是。


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开学寄语

#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多选题常见计分法

#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 改编而成。需注意错题不单单是错误的选项,对的选项没选也算错误。


1074宇宙无敌加法器

#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;
}

小坑。结果是 0 的时候确保输出一个 0 。


1075链表元素分类

#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;
}

存储链表后,从链表头开始遍历依次存下 <0、0<=&&<=k、>k 的地址。

按上面的顺序依次输出地址和数据。


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互评成绩计算

#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。上学期ACM校赛的一个签到题。


1079延迟的回文数

#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;
}

大整数高精度运算这块总是写的很麻烦。。重复的翻转总怕出错。


1080MOOC期终成绩

#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处理这种大规模可重复数据真的是太麻烦了,直接线性搜索名称最后一个测试点稳稳地超时。

解决方法是多开两个结构体数组用来存储期中、期末考试成绩,以 >=200分 的上机成绩作为参考,排序三个成绩的名称后,按顺序补全作为结果的结构体数组中的期中、期末成绩。

我的想法是找到同名的就把成绩复制过去,没成绩的就是 0 ,最后输出的时候过滤总成绩 <60 分的,期中考试是 0 的输出 -1 就是了。

结果。。最后一个测试点一直是WA??折腾了老一番,怎么改都不对。。

吃了顿饭冷静了下,发现期中考试会有家伙参加考试,然后考了个 0 分的。。。

2333,长教训了,算是自己逻辑不周吧。。

另>>:做出来竟然比用STL库 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外观数列

#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 的时候,上万位都打不住。


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语言鸡肋的时候到了,什么辅助数据结构也没有,只能用结构体数组从头构建。处理加权分数的时候最后转成整形变量,后面的排序输出会方便很多,还不会出莫名其妙的错误。


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狼人杀-简单版

#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;
}

枚举法。先尝试了下枚举撒谎的,发现很难判断是否正确的说出了狼人是哪两个,折腾半天失败告终…555…555…

枚举狼人就很简单了,谁说得和预设狼人不符,那么说的就是假话。再判断下是不是只有一个狼人说了假话就是了。


1090危险品装箱

#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;
}

用二维数组先存储每个编号对应的若干个编号,sp[编号][0]存储总共对应着几个。

用布尔数组统计每个输入的所有不相容编号,之后查询如果有矛盾输出No,否则Yes。

看了看其他人做的,大多用的STL容器,自己对STL库的掌握还需要努力啊……


>>以下5题为2018/12/09PAT参赛时所写


1091N-自守数

#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;
}

统计每个城市的和,取最大值遍历。

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;
}

考试时写的有点儿乱,循环里的变量都定义在了外面,怕不支持C99。

统计出现两次的字符,这些字符只能打印一次。

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;
}

挨个取数字判断是否为素数即可。

小坑,不要忘了题目中说的保留前导零。

1095解码PAT准考证

#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;
}

这次考试最麻烦的一道题,要求很多。

每个指令没输出都要输出NA,所有前导零都不可省略。其他的正常来就是了。


END

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

  1. PTA平台 · PAT(Basic Level) Practice(中文) 题目集

    前  言 ※  PTA是 程序设计类实验辅助教学平台 ,里边包含一些编程题目集以供练习. ※  PAT是 浙江大学计算机程序设计能力考试(Programming Ability Test),分为乙级( ...

  2. PAT 乙级 (Basic Level) Practice (中文)1051

    1051 复数乘法 (15 分) 复数可以写成 (A+Bi)(A+Bi)(A+Bi) 的常规形式,其中 AAA 是实部,BBB 是虚部,iii 是虚数单位,满足 i​2​​=−1i^​2^​​=−1i ...

  3. 【C语言】PAT(Basic Level) 1003 “答案正确”是自动判题系统给出的最令人欢喜的回复。 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

    规则 "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件,系统就输出"答案正 ...

  4. PAT 乙级 (Basic Level) Practice 1014 福尔摩斯的约会 解题思路

    本来以为这题没啥好说的,提交完看了一眼通过率 emmm好吧还是提醒一下题目里的隐藏的坑,也许能帮到一些不知道卡在哪的同学. 提炼题目的有效信息如下: 1.输入四行两对字符串,第一对字符串中的第 1 对 ...

  5. 1001 害死人不偿命的(3n+1)猜想 (15分) PAT (Basic Level) Practice (中文)C语言版

    PAT (Basic Level) Practice (中文) 1001 害死人不偿命的(3n+1)猜想 (15分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一 ...

  6. 【题解】PAT (Basic Level) Practice (中文)

    互联网行业的小白,写博客的目的是为了记录自己的学习过程.对自己学习中所犯的错误做一个总结.由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教! PAT Basic Level P ...

  7. PAT (Basic Level) Practice (中文)1058 选择题 (20 分)

    PAT (Basic Level) Practice (中文)1058 选择题 (20 分) 文章目录 PAT (Basic Level) Practice (中文)1058 选择题 (20 分) 题 ...

  8. PAT (Basic Level) Practice (中文)1095 解码PAT准考证 (25 分)

    PAT (Basic Level) Practice (中文)1095 解码PAT准考证 (25 分) PAT 准考证号由 4 部分组成: 第 1 位是级别,即T代表顶级:A代表甲级:B代表乙级: 第 ...

  9. PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642 题目描述 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下 ...

  10. 1048 数字加密【PAT (Basic Level) Practice (中文)】

    1048 数字加密[PAT (Basic Level) Practice (中文)] 原题链接:1048 数字加密 (pintia.cn) 1.前言 PAT(乙级)2015年冬季考试 第三题 分数: ...

最新文章

  1. 【Java】 Java网络编程总结
  2. Java虚拟机学习(4):JDK可视化监控工具
  3. 301. Remove Invalid Parentheses
  4. gmail注册手机号不能用于验证_注册Google帐户手机号无法验证的问题
  5. c#如何通过ftp上传文件_ftp自动上传工具,ftp自动上传工具如何自动上传文件
  6. poj/OpenJ_Bailian - 2528 离散化+线段树
  7. JAXB –表示空集合和空集合
  8. 4线电子围栏安装示意图_知识积累|周界防护-脉冲电子围栏的安装
  9. c++ 优先队列_C/C++数据结构:队列结构最全解析!带你零基础入门队列结构
  10. [小结] flexbox
  11. 浙江大学课程攻略共享计划
  12. 如何将PDF英文文档进行翻译?
  13. OBS,vMIX,Wirecast,TCliveSP直播串流导播软件区别及比较
  14. 有限域(2)——理想和商环
  15. 杭州的旅游景点有哪些传说的民间故事
  16. 2021“创芯中国”集成电路创新挑战赛芯片测试赛项(华南赛区)正式打响
  17. vray for 3dmax分布式渲染故障疑难解答!
  18. 中国运动型多功能车和皮卡视频行业市场供需与战略研究报告
  19. 计算机管理进不去的原因,电脑进不了系统Windows怎么解决?电脑进不了系统的原因和解决方法...
  20. 【ArcGIS错误集锦002-Server02】ArcGISserver发布站点报错Failed to create the site. Could not create directory path

热门文章

  1. 回扣应该怎么给——某人的经验
  2. 查找bug的方法(随笔)
  3. 微信小程序帮你赚到第一桶金
  4. NAT类型与P2P游戏
  5. 基于i.mx6q平台的NES模拟器移植
  6. (收藏)不错的敏捷迭代回顾会步骤
  7. 常用优化网页加载速度方法
  8. JS基础——图片切换的综合实例
  9. MonoJSG:联合语义和几何代价函数的单目3D目标检测(CVPR2022)
  10. 基于Java后台(Springboot框架)+前端小程序(MINA框架)+Mysql数据库的在线电子书阅读小程序系统设计与实现