
PAT(Basic Level)
爱喝水的李师傅
空有人间自由身
却非人间自由人
展开
-
1094 谷歌的招聘
#include <iostream>#include <math.h>#include <string>using namespace std;int pd(int n)//判断素数{ if(n==0||n==1) return 0; for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return 0; } return 1;原创 2020-11-26 21:29:33 · 127 阅读 · 0 评论 -
1082 射击比赛
#include <stdio.h>#include <math.h>struct stu{ char ch[5]; int x,y; double z;}N[10001];int main(){ int n,p=0,q=0; double max,min; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s %d %d",N[i].原创 2020-10-28 09:08:27 · 82 阅读 · 0 评论 -
1081 检查密码
#include <stdio.h>#include <string.h>int main(){ int n,len,flag1,flag2,flag3; scanf("%d",&n); getchar(); char ch[100]; while(n--) { gets(ch); len=strlen(ch); flag1=flag2=flag3=0; fo原创 2020-10-28 09:09:52 · 120 阅读 · 0 评论 -
1076 Wifi密码
#include <stdio.h>#include <string.h>int main(){ int n,len,a[100]={0}; char ch[50]; scanf("%d",&n); getchar(); for(int i=0;i<n;i++) { gets(ch); len=strlen(ch); for(int j=0;j<len;j++)原创 2020-10-27 21:47:46 · 91 阅读 · 0 评论 -
1072 开学寄语
解题思路: 按照题目要求一步一步来就不会出错了,题目还是很好理解的。一定要注意最后输出的编号一定是4位的,不然测试点2过不去。#include <stdio.h>int main(){ int n,m,k,c1=0,c2=0;//n,m分别是学生人数和需要被查缴的物品种类数,k是个人物品数量 int a[10],b[10],c[10];//a是需要被查缴的物品编号,b是学生物品编号,c是学生违规物品编号 char ch[5];//ch是学生姓名 sca原创 2020-11-05 16:38:14 · 116 阅读 · 0 评论 -
1071 小赌怡情
#include <stdio.h>int main(){ int n,k,n1,b,t,n2; scanf("%d %d",&n,&k); while(k--) { scanf("%d %d %d %d",&n1,&b,&t,&n2); if(t>n)//玩家下注超过持有的筹码量 printf("Not enough tokens. Total =原创 2020-10-27 21:48:24 · 124 阅读 · 0 评论 -
1066 图像过滤
#include <stdio.h>int main(){ int m,n,a,b,c,k[500][500]={0}; scanf("%d %d %d %d %d",&m,&n,&a,&b,&c); for(int i=0;i<m;i++) for(int j=0;j<n;j++) scanf("%d",&k[i][j]); for(int i=0;i<原创 2020-10-27 21:49:02 · 83 阅读 · 0 评论 -
1063 计算谱半径
解题思路:此题较为简单,先建立一个双精度型的数组,用来存储每对实部的平方与虚部的平方和,再设一个max,找出最大值,最后对最大值开方取两位小数即可.#include <stdio.h>#include <math.h>int main(){ int n,a,b,p=0; double k[11000],max; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d %d",&a,&原创 2020-10-17 15:21:59 · 83 阅读 · 0 评论 -
1056 组合数的和
#include <stdio.h>int main(){ int n,sum=0,a[10]={0}; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) sum=sum+a[i]*10+a[j]+a[j]*10+a[i]; } printf("%d",sum); return原创 2020-10-28 18:07:16 · 83 阅读 · 0 评论 -
1048 数字加密
解题思路一:1.定义一个字符数组map[13]用来存储对13取余后的结果2.将要输入的数定义为字符数组,这样就方便对位计算,并且分别计算出两个数组的长度3.由于题目说明令个位为第一位,所以我们可以从第数组长度-1位开始计算并计数(分奇偶位),注意让每位字符转换成数字,方便进行计算4.最后从结果字符数组中从最后一位开始输出#include <stdio.h>#include <string.h>const char map[13] = { '0','1','2',原创 2020-10-17 11:21:33 · 237 阅读 · 0 评论 -
1047 编程团体赛
#include <stdio.h>int main(){ int n,a[1001]={0},max,p=0; int x,y,z; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d-%d %d",&x,&y,&z); a[x]+=z; } max=a[0]; for(int i=1;i<1001;i++) { if(max<a[i]) { max=a[原创 2020-10-17 15:43:04 · 72 阅读 · 0 评论 -
1046 划拳
#include <stdio.h>int main(){ int n,c1=0,c2=0; scanf("%d",&n); for(int i=1;i<=n;i++) { int a1,a2,b1,b2,sum=0; scanf("%d %d %d %d",&a1,&a2,&b1,&b2); sum=a1+b1; if(a2==sum&&b2!=sum) c2++; if(a2!=sum&原创 2020-10-28 18:05:01 · 181 阅读 · 0 评论 -
1041 考试座位号
#include <stdio.h>int main(){ struct stu { char ch[20]; int s,k; }N[1000]; int n,i,m,p,j; scanf("%d",&n); for(i=0;i<n;i++) scanf("%s %d %d",&N[i].ch,&N[i].s,&N[i].k); scanf("%d",&m); for(i=1;i<=m;i++) { s原创 2020-10-14 14:34:09 · 103 阅读 · 0 评论 -
1037 在霍格沃茨找零钱
#include <stdio.h>int main(){ int x1,y1,z1,x2,y2,z2,k1,k2,k; scanf("%d.%d.%d %d.%d.%d",&x1,&y1,&z1,&x2,&y2,&z2); k1=x1*17*29+y1*29+z1; k2=x2*17*29+y2*29+z2; k=k2-k1; if(k<0) { printf("-"); k=-k; } printf("%d.原创 2020-10-15 19:31:31 · 79 阅读 · 0 评论 -
1036 跟奥巴马一起编程
#include <stdio.h>int main(){ int a; char ch; scanf("%d %c",&a,&ch); for(int i=1;i<=a;i++)//第一行 printf("%c",ch); printf("\n"); for(int i=2;i<=(a-1)/2;i++) { printf("%c",ch); for(int j=2;j<=a-1;j++) printf(" "); p原创 2020-10-14 17:37:41 · 81 阅读 · 0 评论 -
1033 旧键盘打字
#include<stdio.h>#include<string.h>int main(){ int bad[180] = {0}; char sp, c, d; while((d = getchar()) != '\n'){ if(d >= 'a' && d <= 'z'){ bad[d - 'a' + 'A'] = 1; } else{ bad[d] = 1; } }原创 2020-11-24 22:35:15 · 107 阅读 · 0 评论 -
1032 挖掘技术哪家强
#include <stdio.h>int main(){ int n,max,p,q,k=0; scanf("%d",&n); int a[n+1]={0}; for(int i=0;i<n;i++) { scanf("%d %d",&p,&q); a[p]+=q; } max=a[0]; for(int i=1;i<n+1;i++) {原创 2020-10-14 16:48:40 · 97 阅读 · 0 评论 -
1031 查验身份证
注意点:1.字符转换为数字-'0'就行2.可以定义一个flag,使flag=1,只要有一个不合法的直接使之变为0即可。3.只要证明前面17位数字的加权和%11是否等于身份证的最后一位就成了。#include <stdio.h>int main(){ int a[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2},n,c=0,j,sum,flag=1; char str[18],ch[11]={'1','0','X','9','8','7','原创 2020-10-15 22:21:59 · 114 阅读 · 0 评论 -
1029 旧键盘
#include <stdio.h>#include <string.h>int main(){ char ch1[81],ch2[81],ch3[81]=""; int len1,len2,k=0,flag,f1; gets(ch1); gets(ch2); len1=strlen(ch1); len2=strlen(ch2); for(int i=0;i<len1;i++) {原创 2020-11-24 19:02:55 · 96 阅读 · 0 评论 -
1028 人口普查
#include <stdio.h>struct pc{ char name[6]; int yy,mm,dd;}k,max,min;int main(){ int n,c=0; scanf("%d",&n); min.yy=1814;max.mm=9;max.dd=6; max.yy=2014;min.mm=9;min.dd=6; for(int i=0;i<n;i++) { scanf("%s %d/%d/%d",k.name,&k.yy,原创 2020-10-14 17:33:46 · 102 阅读 · 0 评论 -
1027 打印沙漏
#include <stdio.h>int main(){ int sum=1,n,i=1,k; char ch; scanf("%d %c",&n,&ch); while(1) { i++; k=2*(2*i-1); if(sum+k<=n) sum+=k; else break; } i--;原创 2020-10-15 18:42:02 · 82 阅读 · 0 评论 -
1026 程序运行时间
#include <stdio.h>int main(){ int c1,c2,c,hh,mm,ss; scanf("%d %d",&c1,&c2); c=c2-c1; if(c%100>=50)//四舍五入 c=c/100+1; else c=c/100; hh=c/3600; mm=(c-hh*3600)/60; ss=c%60; printf("%02d:%02d:%02d",hh,mm,ss); r原创 2020-10-28 17:34:49 · 105 阅读 · 0 评论 -
1024 科学计数法
解题思路:1.确定字符E的位置pos2.计算指数的值(1)如何计算:从pos+2的位置上开始,每个字符进行这样的操作:exp=exp*10+(ch[i]-'0');其中(ch[i]-'0')为字符转换为数字的写法(2)计算出来的值有三种情况,大于0,等于0以及小于0情况一:指数大于0,第一步先把数字部分输出来,遇"."直接使用continue跳过,第二步是指数较小的情况下,找出位置并添加小数点,最后一步如果指数比较大,大于小数位数,则输出exp-(pos-3)个0.情况二:指原创 2020-10-17 14:24:15 · 284 阅读 · 0 评论 -
1023 组个最小数
#include <stdio.h>int main(){ int a[10]={0},flag=0; for(int i=0;i<10;i++)//输入各个数字的个数 scanf("%d",&a[i]); for(int i=1;i<10;i++)//找出除0外最小的一个数并让其成为首位 { if(a[i]!=0) { printf("%d",i)原创 2020-11-24 15:56:24 · 124 阅读 · 0 评论 -
1022 D进制的A+B
#include <stdio.h>int main(){ int a,b,d,e[31],i=0,k; scanf("%d %d %d",&a,&b,&d); k=a+b; while(k>0) { e[i++]=k%d; k/=d; } for(int j=i-1;j>=0;j--) printf("%d",e[j]); return 0;}#include <stdio.h>int main(){原创 2020-10-14 22:37:41 · 106 阅读 · 1 评论 -
1021 个位数统计
#include <stdio.h>#include <string.h>int main(){ char ch[1001]; scanf("%s",&ch); int a[10]={0},i=0,j=0,k; for(i=0;i<strlen(ch);i++) { k=ch[i]-'0'; switch(k) { case 0: a[0]++; break; case 1: a[1]++; bre原创 2020-10-15 19:38:54 · 94 阅读 · 0 评论 -
1019 数字黑洞
#include <stdio.h>void sortmax(int a[],int len)//数组从大到小来排序{ int temp; for(int i=0;i<len;i++) { for(int j=0;j<len-1-i;j++) { if(a[j]<a[j+1]) { temp=a[j]; a原创 2020-11-24 15:13:55 · 99 阅读 · 0 评论 -
1018 锤子剪刀布
代码比较多,但好在思路清晰#include <stdio.h>int main(){ int n,a[3]={0},b[3]={0}; //ab分别代表甲乙的胜平负次数 int h1[3]={0},h2[3]={0},max,p=0,q=0; // h1h2分别代表甲乙胜的次数,分别是布,锤子,剪刀 scanf("%d",&n); for(int i=0;i<n;i++) { getchar(); char p,q; scanf原创 2020-10-28 16:25:21 · 86 阅读 · 0 评论 -
1017 A除以B
#include <stdio.h>#include <stdio.h>int main(){ int b,len,q,r; char a[1001]; scanf("%s %d",a,&b); len=strlen(a); q=(a[0]-'0')/b; r=(a[0]-'0')%b; if(q!=0||len==1) printf("%d",q); for(int i=1;i<le原创 2020-11-23 20:34:46 · 94 阅读 · 0 评论 -
1016 部分A+B
#include <stdio.h>int main(){ int a,da,b,db; scanf("%d %d %d %d",&a,&da,&b,&db); int c1=0,c2=0,pa=0,pb=0; while(a>0) { if(a%10==da) pa=pa*10+da; a=a/10; } while(b>0) { if(b%10==db) pb=pb*10+db; b=b/10;原创 2020-10-27 08:55:14 · 148 阅读 · 0 评论 -
1014 福尔摩斯的约会
解题思路:1.我的代码写的比较繁琐,唯一可取的就是思路清晰2.第一步:先找出第一对相同的大写英文字母(范围可以小一点,因为是七天,所以范围A-G就行了),记录此时的位置3.在此位置上找出第二对相同的字符,范围是0-9,A-N。如果是0-9的话,可以直接输出ch[0][i]-'0'。如果是A-N的话,就输出ch[0][i]-'A'+104.在后两个字符串找出第一对相同的字母,可以是大写,也可以是小写,找到了,直接输出位置就行了#include <stdio.h>int mai原创 2020-10-16 21:30:40 · 72 阅读 · 0 评论 -
1013 数素数
#include <stdio.h>#include <math.h>int pd(int n){ if(n<=1) return 0; if(n==2||n==3) return 2; for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return 0; } return 1;}int main(){原创 2020-10-28 16:11:29 · 87 阅读 · 0 评论 -
1012 数字分类
#include <stdio.h>int main(){ int c[5]={0},a[5]={0},n,temp; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&temp); if(temp%5==0) { if(temp%2==0) { a[0]+=t原创 2020-10-27 08:54:22 · 98 阅读 · 0 评论 -
1011 A+B 和 C
#include <stdio.h>int main(){ long long int n; scanf("%lld",&n); for(int i=1;i<=n;i++) { long long int a,b,c; scanf("%lld %lld %lld",&a,&b,&c); if(a+b>c) printf("Case #%d: true\n",i); else printf("Case #%d: f原创 2020-10-27 08:53:32 · 75 阅读 · 0 评论 -
1010 一元多项式求导
这个思路有一点错误还未找到,希望帮忙解决一下#include <stdio.h>int main(){ int a,b,flag=0; while(1) { scanf("%d %d",&a,&b); if(a==0&&b==0) //零多项式 { printf("0 0"); break; } else原创 2020-10-14 14:29:46 · 115 阅读 · 0 评论 -
1009 说反话
解题思路:1.题目已经保证每个单词之间只有一个空格,并且最后一位没有空格,这就省去了很多麻烦。2.用While...EOF来判断所有单词是否全部输入会更简单一点3.建立一个字符二维数组,使用scanf输入(scanf对字符数组使用%s读入的时候以空格跟换行为读入结束的)#include <stdio.h>int main(){ int n=0; char ch[100][100]; while(scanf("%s",ch[n])!=EOF)原创 2020-10-16 17:11:56 · 90 阅读 · 0 评论 -
1008 数组元素循环右移问题
解题思路:思路一:再建一个数组b,使b接收a变化后的值,再将b的值赋给a,最后输出a,此种思路易于理解,但代码稍微繁琐分三种情况:1.当m%n==0时,b[i]=a[i];2.当m>n时,b[i]=a[(n+i-m%n)%n];3.当m<n时,b[i]=a[(n+i-m)%n];思路二:直接令m=m%n;第一步输出n-m到n-1的内容,第二步输出0到n-m-1的内容,注意一下空格就可以#include <stdio.h>int main(){ int n,m原创 2020-10-16 21:57:14 · 80 阅读 · 0 评论 -
1007 素数对猜想
解题思路: 题目的意思是找到在n以内的素数,并且对相邻两素数进行差值比较,若差值为2,则是素数对#include <stdio.h>#include <math.h>int pd(int n)//判断素数{ if(n<=1) return 0; if(n==2||n==3) return 1; for(int i=2;i<=sqrt(n);i++) { if(n%i==0)原创 2020-10-29 09:57:54 · 94 阅读 · 0 评论 -
1006 换个格式输出整数
#include <stdio.h>int main(){ int n; scanf("%d",&n); for(int i=1;i<=n/100;i++) //百位 printf("B"); for(int i=1;i<=n/10%10;i++) //十位 printf("S"); for(int i=1;i<=n%10;i++) //各位 printf("%d原创 2020-10-14 21:54:44 · 70 阅读 · 0 评论 -
1004 成绩排名
#include <stdio.h>int main(){ struct stu { char name[11]; char no[11]; int score; }N[10001]; int n,min,max,f1=0,f2=0; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%s %s %d",&N[i].name,&N[i].no,&N[i].score); min=N[0]原创 2020-10-14 14:37:21 · 75 阅读 · 0 评论