
PTA Basic Level
2021.12.02完成(大一上)
Crer_lu
浙江大学计算机科学与技术在读
展开
-
PTA BASIC LEVEL 结题博客
花了近三个月时间吧(主要是最近的一个月里刷的多一些)今天终于迎来了BASIC LEVEL 的结束心情可以说是非常激动了最近会尽快整理出来所有的题解博客滴!!!原创 2021-12-02 20:50:51 · 271 阅读 · 0 评论 -
1044 火星数字 (20 分)(测试点一)
1044 火星数字 (20 分)题目链接算法分析1.用两个字符串数组存下每一个数字对应的三个字母。2.进入循环后,首先对读入的类型进行判断,并用flag存下,最终用于输出结果。3.然后分两种情况进行分析和处理:(1)对于输入的数字,将其转化为十进制数,然后再转化为十三进制数。(2)对于输入的字母,每三位进行计算,转化为十进制数。测试点的问题测试点一其实就是对输入0时的特殊判断,这里我尽量说的详细一些。我的算法中用ans数组存下了结果的每一位,输出时对照字符串数组输出。由于我采用的是每原创 2021-11-18 14:19:46 · 376 阅读 · 0 评论 -
1048 数字加密 (20 分)
1048 数字加密 (20 分)题目链接算法分析由于数字可能会超过一百位,所以我们选择用字符串来读入。然后把各位数字存到一个整形数组中,之后再对每一位进行分类讨论并计算。代码实现#include<bits/stdc++.h>using namespace std;#define N 110char s[N] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K'};int a[N], b[N];//原创 2021-11-21 12:55:13 · 470 阅读 · 0 评论 -
1049 数列的片段和 (20 分)(测试点二和测试点三答案错误)
1049 数列的片段和 (20 分)题目链接算法分析我们首先看数据范围这就意味着我们的算法只能是O(N)或者O(logN),O(N^2)必超时因此我们来这样想:对于每一个位置上的元素,它在结果中计算的次数是多少?分为两种情况:(1)不包含前面的元素,次数为 n - i + 1(2)包含前面的元素,次数为 (i - 1) * (n - i + 1)把二者加起来就是 i*(n - i + 1)设每次读入的项为xi,则答案为测试点这里主要是由于n取最大值时,int和double超原创 2021-11-23 11:54:15 · 501 阅读 · 0 评论 -
1063 计算谱半径 (20 分)(算法分析+代码实现)
1063 计算谱半径 (20 分)题目链接算法分析依次读入每一组x和y,然后计算到原点的距离,并对最大值进行更新。代码实现#include<bits/stdc++.h>using namespace std;int main(){ int n, x, y; double mx = -1; scanf("%d", &n); for(int i = 1; i <= n; ++ i){ scanf("%d%d", &x, &y); mx =原创 2021-12-01 09:59:20 · 390 阅读 · 0 评论 -
1031 查验身份证 (15 分)
1031 查验身份证 (15 分)题目链接算法分析字符串形式读入,并进行判断,如果不正确,直接输出读入的字符串,如果所有的字符串都合法,用一个flag标记,最后输出“All passed”代码实现#include<bits/stdc++.h>using namespace std;#define N 20int sk[N];int t;int weight[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};string a;int jud原创 2021-12-06 23:45:16 · 210 阅读 · 0 评论 -
1043 输出PATest (20 分)
1043 输出PATest (20 分)题目链接算法分析依次读入字符串,用一个栈数组存下各个字母出现的次数,然后再用两层循环输出结果。原创 2021-11-18 12:50:30 · 125 阅读 · 0 评论 -
1070 结绳 (25 分)(测试点1)
1070 结绳 (25 分)题目链接算法分析从第一根最短的绳子开始折起来,折到最长的绳子损失就最小。(贪心算法)测试点我这个题卡在了测试点一然后我就去上网察看各路代码,再对照我的代码后发现,原来的算法就是错的,真不知道怎么对了另外四个测试点 ,问题就出在这里:double sum = 0;for(int i = 1; i <= n; ++ i)sum = (sum + x[i]) / 2.0;折第一根绳子就要对折?很明显是不对的所以稍作修改,从第二根才开始对折doubl原创 2021-11-27 12:48:45 · 421 阅读 · 0 评论 -
1081 检查密码 (15 分)(测试点2)(代码实现+代码实现)
1081 检查密码 (15 分)题目链接算法分析用两个变量ap_digit和ap_zm来记录是否有数字和字母出现,然后进行特判并输出就好了.测试点测试点2是在考察是否有考虑字符串中含有空格代码实现#include<bits/stdc++.h>using namespace std;int main(){ string s; int n; scanf("%d", &n); getline(cin, s); for(int i = 1; i <= n; +原创 2021-12-02 20:55:28 · 414 阅读 · 0 评论 -
1076 Wifi密码 (15 分)
1076 Wifi密码 (15 分)题目链接代码实现#include<bits/stdc++.h>using namespace std;#define N 105int ans[N], t;int main(){ int n; char a, b, c; scanf("%d", &n); for(int i = 1; i <= n; ++ i){ for(int j = 1; j <= 4; ++ j){ scanf(" %c-%c", &a原创 2021-11-27 17:39:57 · 352 阅读 · 0 评论 -
1068 万绿丛中一点红 (20 分)(测试点三)
1068 万绿丛中一点红 (20 分)题目链接算法分析题目本身不难,但是非常难get到出题人的全部意图,要注意以下几点:(1)周围八个点(×)------周围的点,如何判断?(看下面代码的judge函数)(2)差值-----差的绝对值(3)唯一存在------颜色不重复测试点我这个题卡在测试点三,一开始是因为没有考虑只能出现一次的情况,后来用map修改后还是不行,因此又调了半天,最终发现是在“差值”上面出了问题,应该判断二者的差的绝对值。代码实现#include<bits/stdc原创 2021-11-27 09:31:05 · 325 阅读 · 0 评论 -
1026 程序运行时间 (15 分)(算法分析+代码实现)
1026 程序运行时间 (15 分)题目链接算法分析注意这几点:1.四舍五入。2.printf补0输出代码实现#include<bits/stdc++.h>using namespace std;int main(){ int a, b; scanf("%d%d", &a, &b); int c = int(double(b - a) / 100.0 + 0.5); int m = c / 3600; c %= 3600; printf("%02d原创 2021-12-06 23:44:09 · 94 阅读 · 0 评论 -
1024 科学计数法 (20 分)(算法分析+代码实现)
1024 科学计数法 (20 分)题目链接算法分析分为以下几个部分:1.最开头的符号,即为结果的符号2.读入数字,用bl标记,如果是底数,存到cr数组里,如果是指数,存到num数组里。3.向左平移还是向右平移,用place记录这个符号的下标。4.按要求输出(注意保留原精度)代码实现#include<bits/stdc++.h>#include<string>using namespace std;#define N 10005char cr[N];int原创 2021-12-05 22:11:37 · 335 阅读 · 0 评论 -
1041 考试座位号 (15 分)(算法分析+代码实现)
1041 考试座位号 (15 分)题目链接算法分析结构体数组的使用代码实现#include<bits/stdc++.h>using namespace std;#define N 1005struct stu{ string id; int to;};struct stu ex[N];int main(){ string s;// 暂时记录 int To;//暂时记录 int n; int x; scanf("%d", &n); for(int原创 2021-12-07 09:37:48 · 123 阅读 · 0 评论 -
1023 组个最小数 (20 分)(算法分析+代码实现)
1023 组个最小数 (20 分)题目链接算法分析分有0和没有0两种情况进行讨论代码实现#include<bits/stdc++.h>using namespace std;#define N 15int cnt[N];int main(){ int t = 0; for(int i = 0; i <= 9; ++ i){ scanf("%d", &cnt[i]); } if(cnt[0]){ for(int i = 1; i <= 9; +原创 2021-12-05 22:11:31 · 112 阅读 · 0 评论 -
1092 最好吃的月饼 (20 分)(算法分析+代码实现)
1092 最好吃的月饼 (20 分)题目链接算法分析开一个月饼结构体,然后结构体排序就好.代码实现#include<bits/stdc++.h>using namespace std;#define N 1005struct mooncake{ int id, sales;}mk[N];bool cmp(const mooncake a, const mooncake b){ return a.sales == b.sales ? a.id < b.id : a.s原创 2021-12-02 19:15:22 · 263 阅读 · 1 评论 -
1036 跟奥巴马一起编程 (15 分)(算法分析+代码实现)
1036 跟奥巴马一起编程 (15 分)题目链接算法分析主要是以下两点:1.第一行和最后一行,直接打印字符。2.其他行,第一列和最后一列打印字符。代码实现#include<bits/stdc++.h>using namespace std;int main(){ int n; char s; scanf("%d %c", &n, &s); for(int i = 1; i <= (n + 1) / 2; ++ i){ for(int j =原创 2021-12-06 23:48:19 · 144 阅读 · 0 评论 -
1004 成绩排名 (20 分)(算法分析+代码实现)
1004 成绩排名 (20 分)题目链接算法分析结构体排序代码实现#include<bits/stdc++.h>using namespace std;#define N 100000struct s{ string name, id; int mark;};struct s a[N];bool cmp(s aa, s bb){ return aa.mark < bb.mark;}int main(){ int n; scanf("%d", &n原创 2021-12-03 09:37:45 · 651 阅读 · 0 评论 -
1075 链表元素分类 (25 分)(算法分析+代码实现)
1075 链表元素分类 (25 分)题目链接算法分析读入时,直接把各结点分成三类:1.value < 02.value >= 0 && valude <= k3.value > k分别存到三个结构体数组中,然后再存回来(便于输出)代码实现#include<bits/stdc++.h>using namespace std;struct Node{ int addres, next; int value;};#define N原创 2021-12-02 09:19:16 · 245 阅读 · 0 评论 -
1056 组合数的和 (15 分)(算法分析+代码实现)
1056 组合数的和 (15 分)题目链接算法分析跑两次循环,i和j不相等时,就把两位数加入到总和中。代码实现#include<bits/stdc++.h>using namespace std;#define N 15int a[N], sum;int cal(int x, int y){ return x * 10 + y;}int main(){ int n; scanf("%d", &n); for(int i = 1; i <= n; ++原创 2021-11-25 08:08:21 · 420 阅读 · 0 评论 -
1082 射击比赛 (20 分)
1082 射击比赛 (20 分)题目链接算法分析读入时计算并存储,然后结构体排序代码实现#include<bits/stdc++.h>using namespace std;#define N 10005struct player{ int id; int dis;}pler[N];bool cmp(player a, player b){ return a.dis < b.dis;}int main(){ int n, id, x, y; scanf("原创 2021-11-29 12:57:19 · 112 阅读 · 0 评论 -
1028 人口普查 (20 分)(算法分析)
1028 人口普查 (20 分)题目链接算法分析题目不难,但要求比较繁琐,具体看代码吧。代码实现#include<bits/stdc++.h>#include<iostream>using namespace std;#define N 100010struct ss{ char name[10]; int year, month, day;};struct ss man[N], M[N];int t;bool judge(int x){ if(ma原创 2021-12-06 23:44:45 · 208 阅读 · 0 评论 -
1072 开学寄语 (20 分)(测试点二)
1072 开学寄语 (20 分)题目链接算法分析比较简单的思路,用vector存下违规物品,然后用find函数查找即可。测试点我卡在测试点二,只要注意一下**物品编号一定是四位整数**(补0)就OK。代码实现#include<bits/stdc++.h>using namespace std;vector< int >Ths;int stu_cnt, ths_cnt;int main(){ int n, m, x; scanf("%d%d", &原创 2021-11-27 13:10:18 · 302 阅读 · 1 评论 -
1077 互评成绩计算 (20 分)
1077 互评成绩计算 (20 分)题目链接算法分析:唯一的亮点就是去掉最高分和去掉最低分的处理吧,其它的也不难。代码实现#include<bits/stdc++.h>using namespace std;int main(){ int n, m; int ther, stu; scanf("%d%d", &n, &m); for(int i = 1; i <= n; ++ i){ int Min = 1e9, Max = -1; int原创 2021-11-28 13:35:46 · 92 阅读 · 0 评论 -
1053 住房空置率 (20 分)
1053 住房空置率 (20 分)题目链接算法分析没什么特别的,按照题目要求做就好,注意不要搞错数据类型就好。代码实现#include<bits/stdc++.h>using namespace std;int cnt1, cnt2;int main(){ double x, e; int n, d; int k; scanf("%d%lf%d", &n, &e, &d); for(int i = 1; i <= n; ++ i){原创 2021-11-29 10:00:04 · 182 阅读 · 0 评论 -
1071 小赌怡情 (15 分)(算法分析+代码实现)
1071 小赌怡情 (15 分)题目链接算法分析题目简单,做好判断,按要求输出。代码实现#include<bits/stdc++.h>using namespace std;int main(){ int T, K; int n1, b, t, n2; scanf("%d%d", &T, &K); for(int i = 1; i <= K; ++ i){ scanf("%d%d%d%d", &n1, &b, &t, &a原创 2021-12-01 11:21:53 · 237 阅读 · 0 评论 -
1079 延迟的回文数 (20 分)(测试点2、3、4)(算法分析+代码实现)
1079 延迟的回文数 (20 分)题目链接算法分析写两个函数:1.回文判断函数judge()2.求和函数work()测试点测试点2,3,4是输入即为回文数,特判一下就过了。代码实现#include<bits/stdc++.h>#include<string>using namespace std;string work(string a, string b){ int ta[1005], tb[1005]; string ans; int l1 =原创 2021-12-02 11:28:39 · 267 阅读 · 0 评论 -
1019 数字黑洞 (20 分)(算法分析+代码实现)
1019 数字黑洞 (20 分)题目链接算法分析手动栈+排序,循环处理并输出结果代码实现#include<bits/stdc++.h>using namespace std;int t, T[5];void work(int n){ t = 0; T[++ t] = n / 1000; n -= T[1] * 1000; T[++ t] = n / 100; n -= T[2] * 100; T[++ t] = n / 10; n -= T[3] * 10; T[++原创 2021-12-05 22:11:04 · 108 阅读 · 0 评论 -
1025 反转链表 (25 分)(算法分析+代码实现)
1025 反转链表 (25 分)题目链接算法分析结构体构建链表结构代码实现#include<bits/stdc++.h>using namespace std;#define N 100005struct node{ int value; int next;};struct node Node[N];bool cmp(node a, node b){ return a.value < b.value;};struct ss{ int address; i原创 2021-12-05 22:11:46 · 101 阅读 · 0 评论 -
1003 我要通过 (20 分)(算法分析+代码实现)
1003 我要通过! (20 分)题目链接算法分析注意以下几点:1.P,A,T三个字母必须都出现过,用on数组来记录。2.只能有一个P和一个T出现,用on数组来记录3.用jl数组记录被P和T分成三段的字符串中,A的个数4.按照要求特判就好了代码实现#include<bits/stdc++.h>using namespace std;int on[5];int jl[5];int main(){ int n; string a; scanf("%d", &原创 2021-12-03 09:35:41 · 162 阅读 · 0 评论 -
1034 有理数四则运算 (20 分)(测试点三:运行超时)
1034 有理数四则运算 (20 分)题目链接算法分析本题思路是比较简单 的,模拟我们正常计算两个有理数就好了。关键的难点在于特殊情况的判断:正负,真分数假分数,结果是否为整数和0.测试点我卡在了测试点三,运行超时主要是在求最大公约数的地方。解决方法如下:代码实现#include<bits/stdc++.h>using namespace std;char op[4] = {'+', '-', '*', '/'};int gcd(long long a, long l原创 2021-11-22 20:03:10 · 371 阅读 · 0 评论 -
1057 数零壹 (20 分)(算法分析+代码实现)
1057 数零壹 (20 分)题目链接算法分析从字符串第一位开始到最后一位,如果是小写或大写的字母,依次更新sum的值,然后转化为二进制数,统计0和1的个数代码实现#include<bits/stdc++.h>using namespace std;int main(){ string s; getline(cin, s); int len = s.size(), sum = 0; for(int i = 0; i < len; ++ i){ if(isuppe原创 2021-11-30 07:30:07 · 117 阅读 · 0 评论 -
1021 个位数统计 (15 分)(算法分析+代码实现)
1021 个位数统计 (15 分)题目链接算法分析字符串形式读入,依次把每一位扔到一个“桶”里,然后输出就好。代码实现#include<bits/stdc++.h>using namespace std;#define N 10int cnt[N];int main(){ string a; cin>> a; int len = a.size(); for(int i = 0; i < len; ++ i){ int x = a[i] - '0'原创 2021-12-05 22:11:18 · 104 阅读 · 0 评论 -
1066 图像过滤 (15 分)
1066 图像过滤 (15 分)题目链接算法分析读入一个数,判断它是否在区间内,如果在,则修改它的值,然后用printf格式化输出用0补全的三个位宽的这个数,最后要注意空格和换行。代码实现#include<bits/stdc++.h>using namespace std;int main(){ int m, n, low, upp, chge; int x; scanf("%d%d%d%d%d", &m, &n, &low, &upp, &原创 2021-11-26 08:26:18 · 216 阅读 · 0 评论 -
1002 写出这个数 (20 分)(算法分析+代码实现)
1002 写出这个数 (20 分)题目链接算法分析模10取余并求和,然后输出结果每一位对应的字符串就好了。代码实现#include<bits/stdc++.h>using namespace std;string ss[15] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};int main(){ string s; cin>> s; int t = 0; int len原创 2021-12-03 09:25:43 · 217 阅读 · 0 评论 -
1039 到底买不买 (20 分)(算法分析+代码实现)
1039 到底买不买 (20 分)题目链接算法分析读入两条链子的珠子信息,用ca和cb数组存下来,然后再从头到尾跑一次第二条链子,注意以下几点:1.每一种珠子只计算一次。2.对于某一种珠子,如果第一条个数大于等于第二条,sum加上第二条中的个数,如果第一条个数小于第二条,sum加上第一条中的个数。3.最后进行判断,如果sum恰好等于第二条中的个数,说明恰好能满足要求,如果sum小于第二条的个数(不可能大于),那lenb-sum即为缺少的珠子个数。代码实现#include<bits/st原创 2021-12-07 09:37:33 · 137 阅读 · 0 评论 -
1037 在霍格沃茨找零钱 (20 分)(算法分析+代码实现)
1037 在霍格沃茨找零钱 (20 分)题目链接算法分析首先判断两个数的相对大小,保证第一个数比第二个数大,然后再对每一位进行对应相减,如果结果小于零,就向上借位。代码实现#include<bits/stdc++.h>using namespace std;#define N 5int a[N], b[N], c[N];int main(){ scanf("%d.%d.%d", &a[1], &a[2], &a[3]); scanf("%d.%d.%原创 2021-12-07 00:06:39 · 218 阅读 · 0 评论 -
1093 字符串A+B (20 分)
1093 字符串A+B (20 分)题目链接算法分析依次遍历两个字符串,用on数组标记是否输出过值为1表示输出过,值为0表示没有输出过.代码实现#include<bits/stdc++.h>using namespace std;#define N 150int on[N];int main(){ string a, b; getline(cin, a); getline(cin, b); int l1 = a.size(); int l2 = b.size();原创 2021-12-02 19:21:38 · 212 阅读 · 0 评论 -
1087 有多少不同的值 (20 分)(测试点三段错误)
1087 有多少不同的值 (20 分)题目链接算法分析:一遍for循环就好测试点:如果测试点三段错误,那你就是数组越界了。代码实现#include<bits/stdc++.h>using namespace std;#define N 20005int on[N], cnt;int main(){ int n; scanf("%d", &n); for(int i = 1; i <= n; ++ i){ int x = i / 2 + i / 3 +原创 2021-11-28 13:02:34 · 238 阅读 · 0 评论 -
1058 选择题 (20 分)
1058 选择题 (20 分)题目链接算法分析我的算法主要有两点1.开一个标记数组on【300】(acii最大就255),标记为1,便于后续判断是否为正确答案2.结构体数组排序,并特判后输出。代码实现#include<bits/stdc++.h>using namespace std;struct que{ int mx;//满分 int id;//题目号 int wrong;//错误人数 int true_cnt;//该题正确选项的数目 int on[300];标原创 2021-11-25 09:22:40 · 235 阅读 · 0 评论