- 博客(60)
- 收藏
- 关注
原创 PAT乙级1060 爱丁顿数
把每天骑行距离递减排序成数组a,比较a[i]和i的大小即可#include <cstdio>#include <algorithm>using namespace std; const int maxn = 100001;int distanceRecord[maxn] = {0}, dNum = 1;bool cmp(int a, int b){ return a > b; }int main(){ int n; scanf("%d", &
2021-08-28 08:39:49
144
原创 PAT乙级1059 C语言竞赛
#include <cstdio>#include <cstring>#include <cmath>//以空间换时间,设置一个10010大小的数组,下标为选手id,值为选手的排名 const int maxn = 10010;int rank[maxn];bool isPrime(int a){ bool flag = true; if(a == 1) return false; for(int i = 2; i <= sqrt(a); i.
2021-08-28 08:38:37
561
原创 PAT乙级1058 选择题
#include <cstdio>#include <algorithm>#include <set>using namespace std;struct question{ //多选题结构体 int id; //多选题id,从0开始 int weight; //分值 int allOptionNumber; //总选项数量 int rightOptionNumber; //正确选项数量 set<char> rightOpti.
2021-08-28 08:37:54
146
原创 PAT乙级1056 数零壹
#include <cstdio>#include <cstring>//给出的字符串可能有空格 const int maxn = 100010;char str[maxn];int main(){ scanf("%[^\n]", str); int len = strlen(str), letterSum = 0; char c; for(int i = 0; i < len; i++){ c = str[i]; if(c >= 'a'.
2021-08-28 08:37:06
116
原创 PAT乙级1056 组合数的和
一个数在个位出现n-1次,十位出现n-1次#include <cstdio>int main(){ int n, out = 0, temp; scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%d", &temp); out += 11 * (n - 1) * temp; } printf("%d", out); return 0;}...
2021-08-28 08:36:25
64
原创 PAT乙级1055 集体照
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct student{ char name[10]; int height;}stu[10000];bool cmp(student a, student b){ if(a.height != b.height) return a.height < b.height; else re.
2021-08-28 08:35:29
75
原创 PAT乙级1054 求平均值
#include <cstdio>#include <cstring>//写法不严谨,居然测试点全过了 int main(){ int n, count = 0; //count是合法数字数量 double temp, legalSum = 0; //legalSum是合法数字总和 char str[100]; //保存每个读取的字符串 scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%.
2021-08-28 08:34:49
61
原创 PAT乙级1053 住房空置率
注意半空置和空置只能取一个状态,不能既是半空置又是空置#include <cstdio>int main(){ int n, d, k; double e, temp; scanf("%d%lf%d", &n, &e, &d); int EmptyDay, semiEmptyHouse = 0, emptyHouse = 0, count = 0; for(int i = 0; i < n; i++){ scanf("%d", &k)
2021-08-28 08:33:47
95
原创 PAT乙级1052 卖个萌
怎么匹配每个表情是个问题,可惜c++不支持完整的正则表达式用i,j,write来体现字符串的读入,i指向第几个表情,j指向该表情的第几个字符,write指示是否该读入当前字符#include <cstdio>int main(){ char hand[10][5], eye[10][5], mouth[10][5]; int i = 0, j = 0, write = 0; //write决定当前字符是否写入 int handNumber, eyeNumber, mout.
2021-08-28 08:32:28
87
原创 PAT乙级1051 复数乘法
考虑舍入误差问题,例如double a = -0.004保留两位小数输出会变成-0.00提供几个测试用例自己试一下:-0.005 0 1 0-0.004 0 1 0-0.005 1.5707 1 0-0.004 1.5707 1 0#include <cstdio>#include <cmath>const double eps = 5e-3;int main(){ double p1, r1, p2, r2; scanf("%lf%lf%lf...
2021-08-28 08:32:08
66
原创 PAT乙级1050 螺旋矩阵
#include <cstdio>#include <algorithm>#include <cstring>/*怎么把一个序列螺旋填进一个矩阵:设置一个方向变量,有:上、下、左、右,四个方向,初始位置填左上角,然后下一个位置由上一个位置加上方向决定,还要判断,如果下一个位置越界了或者已经被填过了,则按照:右转下,下转左,左转上,上转右的方式改变方向(顺时针)填进一个矩阵后输出 */using namespace std;bool cmp(int .
2021-08-27 08:57:29
93
原创 PAT乙级1049 数列的片段和
#include <cstdio>typedef long double LD;//下标为i的数出现了 (i + 1) * (n - i)次,double测试点2精度不够,用long doubleint main(){ int n; scanf("%d", &n); LD num[n]; for(int i = 0; i < n; i++) scanf("%Lf", num + i); LD out = 0; for(int i = 0; i < n; .
2021-08-27 08:56:52
75
原创 PAT乙级1048 数字加密
#include <cstdio>#include <cstring>int main(){ int a[100] = {0}, b[100] = {0}; char A[101], B[101]; scanf("%s %s", A, B); int aLen = strlen(A), bLen = strlen(B); for(int i = 0; i < aLen; i++) a[i] = A[aLen - i - 1] - '0'; for(int i.
2021-08-27 08:56:19
57
原创 PAT乙级1047 编程团体赛
#include <cstdio>int main(){ int n; int teamScore[1001] = {0}, teamId, memberId, score; scanf("%d", &n); while(n--){ scanf("%d-%d %d", &teamId, &memberId, &score); teamScore[teamId] += score; } int championId = 0, cham.
2021-08-27 08:55:45
75
原创 PAT乙级1046 划拳
#include <cstdio>int main(){ int n; scanf("%d", &n); int j1, j2, y1, y2; int jWin, yWin, jCount = 0, yCount = 0; while(n--){ scanf("%d%d%d%d", &j1, &j2, &y1, &y2); jWin = (j1 + y1 == j2); yWin = (j1 + y1 == y2); if.
2021-08-27 08:55:10
81
原创 PAT乙级1045 快速排序
一个元素可能是主元当且仅当它比前面的元素都要大,比后面的元素都要小因此可以建立一个最大数组maxNum和最小数组minNum,maxNum中存的都是从左数当前最大的数,minNum中存的是从右数当前最小的数,当某个位置这两个数相等,则可能是主元测试点2坑:没有主元的时候,要输出两个换行#include <cstdio>const int maxn = 100010;int num[maxn], maxNum[maxn], minNum[maxn], nNum = 0;..
2021-08-27 08:54:36
85
原创 PAT乙级1044 火星数字
#include <cstdio>#include <cstring>char s1[][5] = {"", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};char s2[][4] = {"", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jo.
2021-08-27 08:53:43
170
原创 PAT乙级1043 输出PATest
#include <cstdio>#include <cstring>const int maxn = 10010;char str[maxn];int main(){ scanf("%s", str); int count[128] = {0}; int len = strlen(str); for(int i = 0; i < len; i++) count[str[i]]++; char a[] = {'P', 'A', 'T', 'e', 's.
2021-08-27 08:53:12
88
原创 PAT乙级1042 字符统计
#include <cstdio>int main(){ char c; int count[128] = {0}; c = getchar(); while(c != '\n'){ if(c >= 'a' && c <= 'z') count[c]++; else if(c >= 'A' && c <= 'Z') count[c - 'A' + 'a']++; c = getchar(); } int m.
2021-08-27 08:52:33
74
原创 PAT乙级1041 考试座位号
#include <cstdio> struct examinee{ char idNumber[17]; int seatNumber;};int main(){ int n, aNum, bNum; char idNum[17]; scanf("%d", &n); examinee ex[n + 1]; //记录考生的数据 while(n--){ scanf("%s %d %d", idNum, &aNum, &bNum); ssc.
2021-08-27 08:51:35
89
原创 PAT乙级1040 有几个PAT
思路:每个A可以形成的PAT等于左边的P乘以右边的T,遍历一遍,记录下来每个位置左边的P和右边的T就行了#include <cstdio>#include <cstring>const int maxn = 100010;const int mod = 1000000007;int leftP[maxn] = {0};char str[maxn];int main(){ scanf("%s", str); int count = 0, len = str
2021-08-26 09:17:44
78
原创 PAT乙级1039 到底买不买
#include <cstdio>#include <cstring>int main(){ int bead[128] = {0}, want[128] = {0}; //每个字符当作一个下标,对应值就是字符的个数 char str1[1010], str2[1010]; scanf("%s %s", str1, str2); int len1 = strlen(str1), len2 = strlen(str2); for(int i = 0; i < .
2021-08-26 09:16:00
68
原创 PAT乙级1038 统计同成绩学生
#include <cstdio>int main(){ int n, count[101] = {0}, score; scanf("%d", &n); while(n--){ scanf("%d", &score); count[score]++; } scanf("%d", &n); while(n--){ scanf("%d", &score); printf("%d", count[score]); if(n &.
2021-08-26 09:15:02
185
原创 PAT乙级1037 在霍格沃茨找零钱
#include <cstdio>typedef long long LL;int main(){ LL g1, g2, s1, s2, k1, k2; scanf("%lld.%lld.%lld %lld.%lld.%lld", &g1, &s1, &k1, &g2, &s2, &k2); LL all1, all2, all3; all1 = g1 * 17 * 29 + s1 * 29 + k1; all2 = g2 * .
2021-08-26 09:14:20
54
原创 PAT乙级1036 跟奥巴马一起编程
#include <cstdio>int main(){ int row, column; char s; scanf("%d %c", &column, &s); row = column % 2? column / 2 + 1 : column / 2; for(int i = 0; i < column; i++) printf("%c", s); printf("\n"); for(int i = 0; i < row - 2; i++){.
2021-08-26 09:13:43
72
原创 PAT乙级1035 插入与归并
主要思路:1.判断排序种类:插入排序特点:序列前面有一段是有序的,后面无序的部分跟初始序列一样,用来判断是不是插入排序和插入排序到哪个位置了。从第一个开始,一直升序,直到找到开始降序的位置。再从降序的位置开始比对,如果跟初始序列完全一样,就是插入排序,否则为归并排序2.再排一次:插入:前面知道降序的位置了,直接从那个地方再排一次就行了归并:关键在于确定是第几次归并了,如果确定了是第k次归并,则把序列分成若干段,每段都是个(最后一段可能少点),再对每段排序即可。假设排序长度是l
2021-08-26 09:13:02
71
原创 PAT乙级1034 有理数四则运算
1.要用long long,因为中间运算可能出现超过int上限的2.abs参数是int类型的,如果要用,用llabs#include <cstdio>#include <cstdlib>typedef long long LL;//2,3测试点卡了很久过不去,最后发现是因为abs的参数是int,如果是long long的要用llabs LL gcd(LL a, LL b){ //辗转相除法求最大公因数 if(a < 0) a = - a; if(b
2021-08-26 09:12:30
181
原创 PAT乙级1033 旧键盘打字
#include <cstdio>#include <cstring>const int maxn = 100010;char str[maxn];int main(){ int available[128] = {0}, flag = 0; //字符是否可用,默认为0,全部可用,flag指示是否可以打出字符 char c; c = getchar(); while(c != '\n'){ if(c >= 'A' && c <.
2021-08-26 09:09:25
59
原创 PAT乙级1032 挖掘机技术哪家强
#include <cstdio>const int maxn = 100010;int school[maxn] = {0};int main(){ int n, maxScore = -1, id, score, n1; scanf("%d", &n); n1 = n; while(n--){ scanf("%d %d", &id, &score); school[id] += score; } int k = 1; for(int .
2021-08-26 09:07:43
62
原创 PAT乙级1031 查验身份证
要检查前十七位是否全是数字#include <cstdio>//要检查前十七位是否全部是数字int main(){ int n, weight[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}, temp; scanf("%d", &n); getchar(); //吸收换行符 char idNumber[19], errorIdNumber[n][19], eNum = 0; char m
2021-08-26 09:07:07
77
原创 PAT乙级1030 完美数列
排序,二分查找#include <cstdio>#include <algorithm>//二分法查找,注意mp乘积可能超过int上限,所以要用long long存 typedef long long LL;using namespace std;const int maxn = 100010;LL num[maxn], nNum = 0;int main(){ int n, p, left, right, mid; LL temp; scanf("
2021-08-25 09:21:38
78
原创 PAT乙级1029 旧键盘
#include <cstdio>#include <cstring>int main(){ char str1[81] ,str2[81], temp; scanf("%s %s", str1, str2); //把字符串读入 int i = 0, j = 0, len = strlen(str1), count[128] = {0}; //i,j分别是两个字符串的下标 while(i < len){ //字符串1没读完,就检查是否缺失字符 if(s.
2021-08-25 09:20:41
74
原创 PAT乙级1028 人口普查
直接排序注意特殊测试点,没有任何一个人的日期符合标准,输出0就行了#include <cstdio>#include <algorithm>using namespace std;const int maxn = 100010;struct resident{ char name[6]; int year; int month; int day;}re[maxn];bool cmp(resident a, resident b){ if(a.y
2021-08-25 09:19:55
87
原创 PAT乙级1027 打印沙漏
等差数列求和公式题目给了n个符号,假设我们最多的一行打印了k个符号,那么总共用的符号就是满足条件,即不能一行打印k+1个符号上式转化一下就是,因此#include <cstdio>#include <cmath>int main(){ int n; char c; scanf("%d %c", &n, &c); int k = int(sqrt((n + 1) / 2.0)); for(int i = 2 * k - 1; i
2021-08-25 09:18:21
55
原创 PAT乙级1026 程序运行时间
#include <cstdio>int main(){ int t1, t2; scanf("%d %d", &t1, &t2); int time = (int)((t2 - t1) / 100.0 + 0.5); printf("%02d:%02d:%02d", time/3600, time % 3600 / 60, time % 60); return 0;}
2021-08-25 09:11:25
64
原创 PAT乙级1025 反转链表
主要思路:把链表转换成顺序表,再进行操作1.先把所有的数据接收到no数组里面,每个节点的地址作为下标,里面存放着节点的数据和下一个节点的地址。2.然后从首地址开始,依次读取,并把读取到的地址依次放到ad数组中,这里需要注意有可能有游离节点,因此循环条件要判断是不是读到-1了,不能简单地写成i < n3.然后把ad数组里面的数据按要求反转了,再输出就可以了#include <cstdio>const int maxn = 100010;struct node{ in..
2021-08-25 09:08:14
163
原创 PAT乙级1024 科学计数法
#include <cstdio>#include <cstring>const int maxn = 10000;char factor[maxn], s[maxn], indNum[5];int main(){ scanf("%s", s); int len = strlen(s), flag = 0, fNum = 0, iNum = 0; for(int i = 0; i < len; i++){ if(s[i] != 'E' &&am.
2021-08-25 09:07:36
74
原创 PAT乙级1023 组个最小数
#include <cstdio>int main(){ int count[10]; for(int i = 0; i < 10; i++) scanf("%d", count + i); for(int i = 1; i < 10; i++){ //先把第一个非零数输出了 if(count[i] != 0){ printf("%d", i); count[i]--; break; } } for(int i = 0; i <.
2021-08-25 09:06:50
54
原创 PAT乙级1022 D进制的A+B
进制转换,除基取余#include <cstdio>int main(){ int a, b, d; scanf("%d %d %d", &a, &b, &d); int sum = a + b; int output[32], i = 0; do{ output[i++] = sum % d; sum /= d; }while(sum); while(--i > -1) printf("%d", output[i]); ret
2021-08-25 09:06:00
53
原创 PAT乙级1021 个位数统计
#include <cstdio>int main(){ char n[1001], c = '0', flag = 0;//flag作用:判断要不要换行 int number[10] = {0};//记录0-9出现次数 while(c != '\n'){ scanf("%c", &c); number[c - '0']++; } for(int i = 0; i < 10; i++){ if(number[i]){ if(flag) pri.
2021-08-25 09:04:24
53
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人