
PTA Basic Level
给个选择
世界上只有10种人,一种懂二进制,一种不懂。
展开
-
PTA 1057 数零壹 (c++ 极简)
1057 数零壹 (20 分)思路:首先在接受的时候一个字符一个字符的接收,每接收一个字符就判断相加(这样可以省去用一个字符数组存储输入数据)然后就是二进制转化,转化的时候因为不需要输出转化结果,只需要统计0和1的个数,所以每循环一次记一次数就可以,代码如下:using namespace std;int main(){ int sum=0,count1=0,count2=0; c...原创 2019-08-15 09:45:07 · 277 阅读 · 0 评论 -
PTA 1038 统计同成绩学生 (c语言)
1038 统计同成绩学生 (20 分)代码如下:int main(){ long long int N,k; int a[100000],b[100000]; int i,score; if(scanf("%lld",&N)); for(i=0;i<N;i++) { if(scanf("%d",&score)); a[score]++; } i...原创 2019-08-12 06:58:31 · 627 阅读 · 0 评论 -
PTA 1039 到底买不买 (c语言 + 分析)
1039 到底买不买 (20 分)分析:我这里是先设立了一个数组,将接收到的每个字符对应的acssi码的值加1,比如输入了一个a,那么str1[97[++;然后再输入第二串字符串的时候,没输入一个字符就让它对应的acssi码的值减1。最后遍历并统计负数之和与正数之和。如果负数不为0,那么就是No 负数为0,那么就是Yes。可以想一想为什么这里不用正数是否为0 来做判断条件代码如下:in...原创 2019-08-12 06:58:41 · 424 阅读 · 0 评论 -
PTA 1040 有几个PAT (c语言)
1040 有几个PAT (25 分)思路:我的大致思路是这样的,在接收这一组字符串的时候先数一下T有几个;然后在遍历的时候出现T就T的数量减1,出现P就P的数量加1,然后出现A就统计这里有几个PAT;举个例子:比如说TTPATP一开始T有三个,然后遍历的时候第一次T减1,第二次T减1(还剩1个),第三次出现P了 P的数量加1;然后第四次出现A了,就统计这一组有1*1=1个。代码如下:...原创 2019-08-12 06:58:50 · 507 阅读 · 0 评论 -
PTA 1041 考试座位号 (c语言)
1041 考试座位号 (15 分)代码如下:int main(){ long long a[1000]; int b[1000],c[1000],x,index,n,i,j; if(scanf("%d",&n)); for(i=0;i<n;i++) if(scanf("%lld%d%d",&a[i],&b[i],&c[i])); if(s...原创 2019-08-12 06:59:00 · 1674 阅读 · 0 评论 -
PTA 1042 字符统计 (c语言)
1042 字符统计 (20 分)1042 字符统计 (20 分)请编写程序,找出一段给定文字中出现最频繁的那个英文字母。输入格式:输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。输出格式:在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字...原创 2019-08-12 06:59:19 · 2686 阅读 · 0 评论 -
PTA 1043 输出PATest (c语言)
1043 输出PATest (20 分)#include<string.h>int main(){ int P=0,A=0,T=0,e=0,s=0,t=0; char ch; while((ch=getchar())!='\n') { if(ch=='P')P++; else if(ch=='A')A++; else if(ch=='T')T++; el...原创 2019-08-12 06:59:28 · 390 阅读 · 0 评论 -
1044 火星数字 (c语言)
1044 火星数字 (20 分)火星人是以 13 进制计数的:地球人的 0 被火星人称为 tret。地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy...原创 2019-08-11 16:37:02 · 301 阅读 · 0 评论 -
PTA 1094 谷歌的招聘 (c++)
1094 谷歌的招聘 (20 分)分析:从头开始根据长度截取字符串转化成数字进行判断,如果符合则输出字符串,,注意是字符串!然后在写的时候不要写s.length(),要写用户输入的长度L,不然会有一个测试点不过。#include<string>#include<cmath>using namespace std;bool ss(int N){ if (...原创 2019-08-20 15:32:19 · 1562 阅读 · 0 评论 -
PTA 1059 C语言竞赛 (c++ map)
1059 C语言竞赛 (20 分)思路:使用map建立一个string->int的容器。然后存入它所对应的编号,最后再根据他的id查找对应的名次就可以判断出来。我这里是这样区分三种:已查的话名次变为-1,未查的话名次肯定是大于等于0的,然后不符合的就应该是0(因为没有给它赋值)。我觉得我写的很容易理解,直接看代码吧,代码如下:using namespace std; int ss(...原创 2019-08-15 16:18:47 · 307 阅读 · 0 评论 -
PTA 1037 在霍格沃茨找零钱 (c语言)
1037 在霍格沃茨找零钱 (20 分)代码如下:#include<math.h>int main(){ int G1,G2,K1,K2,S1,S2,sum1,sum2; if(scanf("%d.%d.%d %d.%d.%d",&G1,&S1,&K1,&G2,&S2,&K2)); sum1=G1*17*29+S1*29+...原创 2019-08-12 06:58:19 · 373 阅读 · 0 评论 -
PTA 1036 跟奥巴马一起编程 (c语言)
1036 跟奥巴马一起编程 (15 分)#include<math.h>int main(){ int i,j,k,n,ch; scanf("%d %c",&n,&ch); k=(n-2*(n/2))>=1?n/2+1:n/2; for(i=1;i<=k;i++) { for(j=1;j<=n;j++) { if(i==...原创 2019-08-12 06:58:06 · 359 阅读 · 0 评论 -
PTA 1035 插入与归并 (c++ 分析)
1035 插入与归并 (25 分)分析:对于大部分刚接触算法的人来说,插入排序应该是比较熟悉的一种排序,很多人可能并不知道归并排序的原理,这里有一篇文章可以看下图:大致意思就是两个两个一组排序,然后四个四个一组排序,以此类推,最后就把全部的排完了。好,我们继续来看这道题。因为题目中给出的所需要排序的数并不多,所以我们没必要直接写出这两种排序方法。下面的代码中我是用的c++中的sort函...原创 2019-08-11 16:01:50 · 283 阅读 · 0 评论 -
PTA 1027 打印沙漏 (c语言+分析+思路)
1027 打印沙漏 (20 分)分析:这道题虽然只有20分,但其复杂程度不亚于25的题目。其中有个坑点就是只有左边有空格,右边不能打印空格,打印会有一个测试点过不了。思路:首先利用数学等差数列前n项和确定要打印的行数,然后要知道每行的空格的规律(0,1,2,3…)和每行打印的字符的规律;然后我把这个沙漏分成两个部分来打印我是先输出了上面的一个完整的三角形,然后又输出了有缺口的下边的三角形...原创 2019-08-11 11:14:10 · 2799 阅读 · 0 评论 -
PTA 1028 人口普查 (c语言)
1028 人口普查 (20 分)分析:这个题还是比较直接的,没有什么坑。我在这里是写了一个专门用以比较的函数,然后比较的时候把他们的年月日当成一个大数字来比较。typedef struct{ char name[6]; int year; int month; int day;}person;int older(person a,person b){ if(((a.year)...原创 2019-08-11 11:21:07 · 530 阅读 · 0 评论 -
PTA 1029 旧键盘 (c语言)
1029 旧键盘 (20 分)分析:这道题直接暴力查找,符合的标记,不符合的最后统一输出来就完了。代码如下:#include<string.h>int main(){ char input[100]={0}; char output[100]={0}; char lose[100]={0}; int i=0,j=0,k=0,flag,n=0; if(scanf("%...原创 2019-08-11 11:24:11 · 532 阅读 · 0 评论 -
PTA 1030 完美数列 (c语言)
1030 完美数列 (25 分)给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。输入格式:输入第一行给出两个正整数 N 和 p,其中 N(≤10的次方5)是输入的正整数的个数,p(≤10的9次方)是给定的参数。第二行给出 N 个正整数,每个数不超过...原创 2019-08-11 11:33:28 · 548 阅读 · 0 评论 -
PTA 1031 查验身份证 (c语言)
1031 查验身份证 (15 分)代码如下:#include<string.h>int main(){ int quan[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; char jian[12]={'1','0','X','9','8','7','6','5','4','3','2'}; int n,count=0,i,j,s=0...原创 2019-08-11 11:34:59 · 1345 阅读 · 0 评论 -
PTA 1032 挖掘机技术哪家强 (c语言)
1032 挖掘机技术哪家强 (20 分)为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。输入格式:输入在第 1 行给出不超过 10的5次方 的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。输出格式:在一行中给...原创 2019-08-11 11:37:57 · 234 阅读 · 0 评论 -
PTA 1058 选择题 (c++)
思路:本题其实思路还是比较直的,只是写的时候可能会有点复杂。首先将题看成一个整体确立一个结构体数组,每个结构体里面存放了题目编号(其实也可以不要),该题分数,选项数,正确数,错误数,和正确选项(用一个字符数组表示)。这些东西处理完之后,然后需要一个新的数组来存放学生的成绩。最后就是用快排对结构体数组排序(注意定义排序规则)代码如下:using namespace std;struct n...原创 2019-08-15 11:01:58 · 565 阅读 · 0 评论 -
PTA 1033 旧键盘打字 (c语言 暴力求解)
1033 旧键盘打字 (20 分)代码如下:#include<string.h>int main(){ int i,j,len1,len2; char a[100001]={0},b[100001]={0}; gets(a); scanf("%s",b); len1=strlen(a); len2=strlen(b); for(i=0;i<len2;...原创 2019-08-11 14:45:55 · 552 阅读 · 2 评论 -
PTA 1034 有理数四则运算 (c语言 + 分析)
1034 有理数四则运算 (20 分)分析:这道题的难点就在于对数据的处理。下面我的代码中,我把它分成了三个部分来处理。首先我写了一个求最大公约数的函数,这样就能很快的求出分子分母可不可以约分(是不是最简);然后我写了一个函数,就是处理它是不是负数,以及让他除以最大公约数看应该符合哪种格式并输出;以上两个步骤完成了运算之前的数据处理,最后我在主函数中用循环加上开关语句(当然if也可以)按...原创 2019-08-11 14:58:24 · 1791 阅读 · 2 评论 -
1060 爱丁顿数(25)(c++)
1060 爱丁顿数(25)(25 分)思路:将用户输入的数存储到一个数组中,然后按从大到小降序排列。然后从头开始遍历。代码如下:#include<algorithm>using namespace std;int a[1000001];bool cmp(int a,int b){ return a>b;}int main(){ int n; ...原创 2019-08-15 17:25:48 · 214 阅读 · 0 评论 -
1061 判断题 (c语言)
1061 判断题 (15 分)代码如下:using namespace std;int main(){ int n,m; cin>>n>>m; int score[m]; int a[m]; for(int i=0;i<m;i++) cin>>score[i]; for(int i=...原创 2019-08-15 17:32:06 · 516 阅读 · 1 评论 -
PTA 1068 万绿丛中一点红 (c++ map+思路+分析)
分析:首先我想说这个题我感觉题意有点模糊啊,有的点就没有讲清楚。首先题目上说如果符合超过两个就输出Not Unique。但是给的样例里面符合的有16711479和16711680但是却输出了后面这个数。后来我想了想,可能是因为16711479出现了两次,所以也不符合。还有一个点就是,这个数与临边数的阙值,额,这里计算的时候要带绝对值。思路:首先建立一个二维数组来存储数,然后用map来判断这个...原创 2019-08-17 09:09:04 · 205 阅读 · 0 评论 -
PTA 1069 微博转发抽奖 (c++)
1069 微博转发抽奖 (20 分)#include<map>#include<string>using namespace std; int main(){ int n,m,s; scanf("%d%d%d",&m,&n,&s); if(s>m) { printf("Keep going...\n"); ...原创 2019-08-17 09:52:54 · 282 阅读 · 0 评论 -
PTA 1070 结绳 (c++ 贪心算法)
1070 结绳 (25 分)分析:题目中让求最大长度。就是找最优解,那么我们采取贪心策略,试想如果把最长的绳子当作第一根绳子,那么接到最后,它就对折了好多次。但是如果把最长的绳子当作最后一根绳子,那么它就只需要对这一次。这样损失可能就会小一点。所以我们可以把接收到的数据从小到大排序之后,再依次对折连接。代码如下:#include<algorithm>using namespac...原创 2019-08-17 15:24:32 · 419 阅读 · 0 评论 -
PTA 1071 小赌怡情 (c语言)
1071 小赌怡情 (15 分)代码如下:int main() { int x, K; scanf("%d %d", &x, &K); int n1,n2,b,t; for (int i=0;i<K;i++) { scanf("%d %d %d %d",&n1,&b,&t,&n...原创 2019-08-17 15:40:17 · 265 阅读 · 0 评论 -
PTA 1072 开学寄语 (c++ map+思路+测试点2)
思路:首先我用map将违规的编号对应的键值变为1;然后在每次输入学生的用品编号的时候用map判断,如果为1则存入一个新的数组中,并统计每个学生的违规数量和违规学生的数量。最后输出。测试点2:最开始我都是用int接收值的,包括map也是int对int的映射。但是编号可能就是0123这种的,接收之后前导0就会不存在。所以我改用string来接收,map改为string对int的映射。当然,你可以...原创 2019-08-17 16:19:39 · 393 阅读 · 0 评论 -
PTA 1073 多选题常见计分法 (c++)
分析:这道题和1058有点类似。这类题属于那种很容易想出来应该怎么解,但是写的时候可能会有点绕。比较考验你的思路是不是很清晰。小建议:可以把一系列处理操作分块处理,封装成函数,最后调用就可以了。下面的代码来自这篇文章https://blog.youkuaiyun.com/qq_40946921/article/details/81166375#include<string>#include...原创 2019-08-17 17:21:25 · 697 阅读 · 0 评论 -
PTA 1074 宇宙无敌加法器 (c++ 思路+全测试点分析)
1074 宇宙无敌加法器 (20 分)首先我要说,这道题真坑。。。真坑。。。。好,下面进入正题。思路:其实你要说怎么做的话,这道题并不算难。我这里建立了三个字符串类型用于接收输入的三个数。然后从最高位开始以此往下加,其实类似与电路里面的加法器。下面代码注释的很清楚,应该容易看明白,哪里不明白的话可以在下方评论,我看到会回你的。测试点分析:首先说1,3这两个点。最后我卡在这两个点好久好久...原创 2019-08-17 22:43:45 · 2670 阅读 · 4 评论 -
PTA 1075 链表元素分类 (c++)
1075 链表元素分类 (25 分)思路:首先建立一个结构体包含数据和下个地址,还有大小为3得vector数组。然后建立一个结构体数组,下标即为当前结点得地址。这样其实就可以用结构体数组来模拟链表进行一系列操作。然后定义一个变量并赋给它首地址,开始遍历到当它不等于-1(即不是链表尾),然后对每一次循环时得存储得数据进行判断 分为data<0 k>data>0和data...原创 2019-08-18 08:25:09 · 245 阅读 · 0 评论 -
PTA 1076 Wifi密码 (c++ 三种写法)
1076 Wifi密码 (15 分)首先上我最开始写的。。。(有一个测试点没过,你们可以看看为什么)#include<map>using namespace std;int main(){ map<char,int>m; m['A']=1;m['B']=2;m['C']=3;m['D']=4; int n; cin>>n; while(n...原创 2019-08-18 09:25:26 · 2330 阅读 · 0 评论 -
PTA 1050 螺旋矩阵 (c++动态数组)
1050 螺旋矩阵 (25 分)本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。输入格式:输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 104 ...原创 2019-08-13 11:02:01 · 550 阅读 · 0 评论 -
PTA 1067 试密码 (c++)
1067 试密码 (20 分)代码如下:#include <string>#include <vector>#include <algorithm>using namespace std; int main() { string pd; int n; cin>>pd>>n; vector&...原创 2019-08-16 18:27:38 · 390 阅读 · 0 评论 -
PTA 1066 图像过滤 (c语言)
代码如下:int main(){ int N,M,A,B,C,D; 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",&...原创 2019-08-16 18:05:56 · 244 阅读 · 0 评论 -
PTA 1062 最简分数 (c++ 最简)
1062 最简分数分析:有一个测试点是最大最小值问题,注意输进去的时候你并不知道哪个大哪个小,所以需要判断。然后就是可以写一个函数来用于判断是否可以化简。代码如下:using namespace std;int judge(int a,int k){ for(int i=2;i<=a;i++) if(!(a%i)&&!(k%i)) ...原创 2019-08-16 09:13:36 · 1010 阅读 · 0 评论 -
PTA 1045 快速排序 (c语言)
1045 快速排序 (25 分)分析:我觉得很多人应该和我一样,上来直接暴力,用双重循环查找,然后发现三个点超时了。然后这个题有个窍门(我也是看的一个大神的),就是先从从小到大排序。如果排序前某个数的下标和排序后它的下标一样,而且比他左边所有数中最大的数还要大,则证明这个数是主元(可以自己想想为什么);代码如下:#include<stdlib.h>int cmp(const...原创 2019-08-12 14:59:24 · 1402 阅读 · 0 评论 -
PTA 1046 划拳 (c++)
1046 划拳 (15 分)代码如下:using namespace std;int a[2];int main(){ int n; cin>>n; while(n--) { int jia1,jia2,yi1,yi2; cin>>jia1>>jia2>>yi1>>yi2; if((jia1+yi1==ji...原创 2019-08-12 15:12:27 · 200 阅读 · 0 评论 -
PTA 1047 编程团体赛 (c语言 最简洁)
1047 编程团体赛 (20 分)分析:这个题就是设置一个数组,把分数存在对应的队伍编号的下标中,然后在输入的时候也可以直接比较出最大值。然后有一个点就是仔细读题,你可以发现队员编号根本没用,所以可以就用一个变量重复接收,没必要再开辟数组去存储代码如下:int s[1001];int main(){ int n,a,b,c,max=-1,t=0; scanf("%d",&...原创 2019-08-12 15:43:00 · 1316 阅读 · 4 评论