pat
HOVL_C++
这个作者很懒,什么都没留下…
展开
-
PAT 卖个萌
卖个萌注意:在之前的1024. 科学计数法 (20)(C语言实现)中,我使用了格式化字符串"%[…]",这种字符串的作用类似于"%s",但是后者会读取字符串到空白字符(空格、换行、制表符等等),前者使scanf读到后面的字符,相当于用户可以自定义scanf的行为。#include <stdio.h>int cnt(char arr[][5]){ char c; int i = 0; while((c = getchar())!='\n') { if(c == '[')原创 2021-10-04 10:55:34 · 95 阅读 · 0 评论 -
PAT 复数乘法
复数乘法注意:C语言的格式化输出虽然能正常四舍五入,但是有一点貌似和一般的自然写法不同:很接近0的负数四舍五入之后不输出0.00,而是-0.00,这点就要特殊照顾了。#include <stdio.h>#include <math.h>int main(){ double r1,p1,r2,p2; int ret = 0; scanf("%lf%lf%lf%lf",&r1,&p1,&r2,&p2); double shi1,shi原创 2021-09-28 08:46:04 · 153 阅读 · 0 评论 -
PAT 螺旋矩阵
螺旋矩阵分析:基本想法是首先将输入的数字存储在数组中,然后对数组进行递减排序。开一个二位数组,将数字依次填入二位数组中,最后打印二位数组#include <stdio.h>#include <string.h>#include <math.h>int com(const char *ps1,const char *ps2){ int *p1 = (int *)ps1; int *p2 = (int *)ps2; return *p2-*p1;}原创 2021-09-25 18:05:49 · 107 阅读 · 0 评论 -
PAT 数列的片段和
数列的片段和分析:主要是精度损失问题。在大量的数累加之后浮点数就会损失精度。计算的过程越多,误差累积越大。使用浮点型进行大量计算时要尽可能地减小计算。#include <stdio.h>int main(){ int N; scanf("%d",&N); int i; long double sum = 0,num = 0; for(i = 1;i<=N;i++) { scanf("%llf",&num); sum += i*num*(N-i原创 2021-09-23 14:58:18 · 86 阅读 · 0 评论 -
PAT 数字加密
数字加密思路:(1)首先需要注意的是加密是从低位到高位进行计算的,并且有一个位数多的话,比较短的那一个对应位按0来计算。(2)处理的时候从最低位开始,将字符串反转比较好处理,然后遍历,逐个位数来判断。需要注意的是循环的i从0开始,所以奇数位和偶数位是相反的。#include <stdio.h>#include <string.h>int main(){ char num[] = "0123456789JQK"; int i,a,b,c; char arr[10原创 2021-09-22 09:07:05 · 135 阅读 · 0 评论 -
PAT 编程团体赛
编程团体赛分析: 看看输入格式就能知道,输入先取编号和成绩,然后编号直接由‘-’得到团队编号,然后直接数据进行处理最后列表中取到最大的值#include <stdio.h>int main(){ int n,score,num,group,sum[1001] = {}; scanf("%d",&n); int i; for(i = 0;i<n;i++) { scanf("%d-%d %d",&group,&num,&score);原创 2021-09-21 10:04:35 · 837 阅读 · 1 评论 -
PAT 划拳
划拳#include <stdio.h>int main(){ int jhan,jhua,yhan,yhua,N,cntj = 0,cnty = 0; scanf("%d",&N); int i; for(i = 0;i<N;i++) { scanf("%d%d%d%d",&jhan,&jhua,&yhan,&yhua); if(jhan+yhan == jhua && jhan+yhan == yhua原创 2021-09-21 09:47:40 · 95 阅读 · 0 评论 -
PAT快速排序
快速排序分析把原数列和排序排好的数列中数字位置进行比较 如果位置不变而且大于所有在他前面的数字 那么这个数字就是主元#include <stdio.h>int com(const char *ps1,const char *ps2){ int *s1 = (int *)ps1; int *s2 = (int *)ps2; return *s1-*s2;}int main(){ int i,N,cnt = 0,max = 0; scanf("%d",&N);原创 2021-09-20 15:39:12 · 107 阅读 · 0 评论 -
PAT 火星数字
火星数字分析:1.首先根据首位字符判断是地球数字还是火星数字,然后分别写处理方法;2.这里稍微有难度的就是对火星数字的处理,首先先分类,分成了小于等于4位的输入和4位以上的输入。前者有可能是0-12,也有可能是13的整数倍的数,这里需要注意的是:火星数字除了单独是0的时候写0,只要高位数字有数,个位数字如果是0就省略不写。#include <stdio.h>#include <string.h>#include <ctype.h>int main(){原创 2021-09-17 09:41:07 · 131 阅读 · 0 评论 -
PAT 输出PATest
输出PATest思路1、接收字符串2、遍历字符串,使用计数数组,分别对 ‘P‘ ‘A‘ ‘T‘ ‘e‘ ‘s‘ ‘t‘ 这几个字符进行计数3、根据计数数组,按顺序分别输出‘P‘ ‘A‘ ‘T‘ ‘e‘ ‘s‘ ‘t‘ (重复循环),若计数为0则不输出,直到计数数组全为零,停止输出#include <stdio.h>#include <string.h>int main(){ int i,j; char arr[7] = "PATest"; char brr原创 2021-09-10 19:53:14 · 103 阅读 · 0 评论 -
PAT 字符统计
字符统计首先建个英文字母的数组,记录每个英文字母出现的次数,然后先读入一行字符串,然后遍历字符串进行判断,出现对应字母就将数组中的指定位置自增1,最后遍历整个数组输出最大频率及出现频率最高的字符。#include <stdio.h>#include <string.h>#include <ctype.h>int main(){ int i; char arr[1001] = {}; int brr[26] = {}; gets(arr); for(原创 2021-09-09 21:56:06 · 173 阅读 · 0 评论 -
PAT 考试座位号----c语言
考试座位号使用结构体就可以简单写出#include <stdio.h>struct examinee{ long long num; int shi; int exam;}examinee[1001];int main(){ int N; int i,j; scanf("%d",&N); for(i = 0;i<N;i++) { scanf("%lld %d %d",&examinee[i].num,&examinee[i]原创 2021-09-05 17:04:02 · 283 阅读 · 0 评论 -
PAT 有几个PAT
有几个PAT思路:如果有一个P出现,则只要知道后面有多少种AT可选,则这个P可以对应的PAT选择方法就有多少种;AT类似。#include <stdio.h>#include <string.h>int main(){ char str[100001]; gets(str); int numt = 0; int numat = 0; int numpat = 0; int i; int len = strlen(str); for(i = len-1;i原创 2021-08-31 14:26:51 · 60 阅读 · 0 评论 -
PAT 到底买不买
到底买不买使用int[128]数组记录每种字符(颜色)的数量,直接将字符的值作为索引。只用一个数组来记录。第一行记录的时候增加计数,第二行记录的时候减少计数。那么正数表示这种颜色足够,负数表示这种颜色不足。将正数和负数分别累加。如果缺少的数量累计值为0,说明足够——可以买,否则缺少的值表示缺少了多少珠子。#include <stdio.h>int main(){ char str1[1000],str2[1000]; int i = 0,cnt1[1000],cnt2[100原创 2021-08-29 16:50:14 · 101 阅读 · 0 评论 -
PAT 统计同成绩学生
统计同成绩学生#include <stdio.h>int main(){ int N,i,j; int arr[110000] = {}; int m; int brr[110000] = {}; int cnt[11000] = {0}; scanf("%d",&N); for(i = 0;i<N;i++) { scanf("%d",&arr[i]); cnt[arr[i]]++; } scanf("%d",&m); for原创 2021-08-25 08:52:55 · 89 阅读 · 0 评论 -
PAT 在霍格沃茨找零钱 ---c语言
在霍格沃茨找零钱#include <stdio.h>int main(){ long long g1,s1,k1,g2,s2,k2; scanf("%lld.%lld.%lld",&g1,&s1,&k1); scanf("%lld.%lld.%lld",&g2,&s2,&k2); long long P = g1*17*29+s1*29+k1; long long A = g2*17*29+s2*29+k2; if(P>原创 2021-08-23 14:16:56 · 167 阅读 · 0 评论 -
PAT 跟奥巴马一起编程
跟奥巴马一起编程#include<stdio.h>int main(){ int N; int n; char x; scanf("%d %c",&N,&x); if(N%2==0) n=N/2; else n=N/2+1; for(int i=1;i<=n;i++) { if(i==1){ for(int k=1;k<=N;k++) printf("%c",x); printf("\n"); } else原创 2021-08-21 19:14:18 · 88 阅读 · 0 评论 -
PAT 插入与归并 ----c语言
插入与归并1.首先是判断排序方法,根据插入排序的特征,前面部分为已排序的,后面的与原始序列是一样的。通过这个特征来判断是否是插入排序,然后不是插入排序的即为归并排序;2.将插入排序在进行一轮即可。3.难点在于输出归并排序的下一步,首先要模拟归并排序,当然不用完全按照归并排序来做,也可以调用sort方法会简单很多,首先按照两位两位一排序,排序后,与给定数列对比,若不同,则再次排序一轮,接着再和给定的数列对比,若不同,则再排序……直到相同后,再排序一轮,然后输出即可。#include <stdi原创 2021-08-19 17:14:13 · 102 阅读 · 0 评论 -
PAT 有理数四则运算
有理数四则运算#include <stdio.h>int maxdivisor(int a,int b){ while(a%b!=0) { int temp = a%b; a = b; b = temp; } return b;}void handle(int n,int d){ if(d == 0) { printf("Inf"); return; } int inegative = 1; if(n<0) { n*=-1;原创 2021-08-16 09:00:23 · 89 阅读 · 0 评论 -
PAT 旧键盘打字
旧键盘打字#include <stdio.h>#include <string.h>int main(){ char arr[100000] = {}; char brr[100000] = {}; int crr[128] = {}; gets(arr); gets(brr); int lena = strlen(arr); int lenb = strlen(brr); int i,j; for(i = 0;i<lena;i++) { i原创 2021-08-16 08:57:59 · 80 阅读 · 0 评论 -
PAT 挖掘机技术哪家强
挖掘机技术哪家强#include <stdio.h>#define MAX 1001000int main(){ int school[MAX] = {}; int N,id,score; int i; int max = -1; scanf("%d",&N); for(i = 0;i<N;i++) { scanf("%d%d",&id,&score); school[id] += score; if(school[id]>原创 2021-08-12 18:46:26 · 64 阅读 · 0 评论 -
PAT 查验身份证
查验身份证#include <stdio.h>#include <string.h>int main(){ int N,i,j; scanf("%d",&N); char arr[N][20]; int sum; int flag[100] = {0}; int brr[20] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; int crr[20] = {1,0,10,9,8,7,6,5,4,3,2}; int c原创 2021-08-12 18:44:50 · 115 阅读 · 0 评论 -
PAT 完美数列
完美数列#include<stdio.h>void quicksort1(int arr[],int left,int right)//快速排序 { if(left<right) { int key = arr[left]; int i = left,j = right; while(i<j) { while(i<j && arr[j]>=key) --j; if(i<j) arr[i++] = arr[j原创 2021-08-09 20:40:27 · 92 阅读 · 0 评论 -
PAT 旧键盘
旧键盘旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。输入描述:输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。输出描述:按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。#include <原创 2021-08-09 20:37:26 · 71 阅读 · 0 评论 -
PAT 人口普查
人口普查题目描述某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过滤掉。输入在第一行给出正整数N,取值在(0, 105];随后N行,每行给出1个人的姓名(由不超过5个英文字母组成的字符串)、以及按“yyyy/mm/dd”(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列原创 2021-08-09 20:35:39 · 122 阅读 · 0 评论 -
PAT 打印沙漏
打印沙漏本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** *****所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。#include<stdio.h>#include<math.h>int main原创 2021-08-06 20:58:46 · 95 阅读 · 0 评论 -
PAT程序运行时间
程序运行时间题目描述要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数f的运行时间,我们只要在调用f之前先调用clock(),获得一个时钟打点数C1;在f执行完成后再调用clock(),获得另一个时钟打点数C2;两次获得的时钟打点数之差(C2-C1)就是原创 2021-08-06 20:56:55 · 164 阅读 · 0 评论 -
PAT 反转链表
反转链表题目描述:给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。输入描述:每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 105)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。接下来有N行,每行格式为:Add原创 2021-08-05 20:06:48 · 101 阅读 · 0 评论 -
PAT 科学计数法
科学计数法**题目描述:**科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。#include <stdio.h>int main(){ char str[10000]; char ds[10000原创 2021-08-05 20:01:00 · 192 阅读 · 0 评论 -
PAT 组个最小数
组个最小数给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。现给定数字,请编写程序输出能够组成的最小的数。输入描述:每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。输出描述:在一行中输出原创 2021-08-05 19:58:33 · 79 阅读 · 0 评论 -
PAT D进制的A+B
D进制的A+B输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。#include <stdio.h>int main(){ int i = 0,j; int sum = 0,a,b,d; int arr[101] = {0}; scanf("%d%d%d",&a,&b,&d); sum = a+b; while(sum!=0) { arr[i++] = sum%d; s原创 2021-08-02 19:23:40 · 86 阅读 · 0 评论 -
PAT个位数统计
个位数统计给定一个k位整数N = dk-110k-1 + … + d1101 + d0 (0<=di<=9, i=0,…,k-1, dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。#include <stdio.h>#include <string.h>#include <stdlib.h>#define max 1000int main(){ int i =原创 2021-07-31 15:26:27 · 70 阅读 · 0 评论 -
PAT 月饼
月饼月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以及5万吨第3种月饼,获得72 + 45/2 = 94.5(亿元)。输入描述:每个输入包含1个测原创 2021-07-31 15:21:49 · 128 阅读 · 0 评论 -
PAT 数字黑洞 ----- c语言
数字黑洞定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。例如,我们从6767开始,将得到7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 61747641 - 1467 = 6174… …现给定任意4位正整数,请编原创 2021-07-31 15:19:54 · 131 阅读 · 0 评论 -
数字分类——c语言描述
数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…;A3 = 被5除后余2的数字的个数;A4 = 被5除后余3的数字的平均数,精确到小数点后1位;A5 = 被5除后余4的数字中最大数字。#include <stdio.h>#include <math.h>int main(){ int N,i,num[1000] =原创 2021-07-26 22:08:36 · 374 阅读 · 0 评论 -
PAT 乙级 1018 锤子剪刀布
1018 锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式:输入第 1 行给出正整数 N(≤105 ),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。输出格式:输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字原创 2021-07-26 22:06:18 · 70 阅读 · 0 评论 -
PAT 乙级 1017 A除以B
1017 A除以B本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。输入格式:输入在1行中依次给出A和B,中间以1空格分隔。输出格式:在1行中依次输出Q和R,中间以1空格分隔。输入样例:123456789050987654321 7输出样例:17636684150141093474 3#include <stdio.h>#include <string.h>int main()原创 2021-07-26 22:04:05 · 62 阅读 · 0 评论 -
PAT 1016 部分A+B
1016 部分A+B正整数 A 的“D A (为 1 位整数)部分”定义为由 A 中所有 D A 组成的新整数 P A 。例如:给定 A=3862767,D A =6,则 A 的“6 部分”P A 是 66,因为 A 中有 2 个 6。 现给定 A、D A 、B、D B ,请编写程序计算 P A +P B 。#include <stdio.h>#include <string.h>int main(原创 2021-07-26 22:02:15 · 51 阅读 · 0 评论 -
PAT 乙级 1015 德才论
1015 德才论输入第一行给出 3 个正整数,分别为:N(≤10^5),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L 的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于 H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线 L 的考生也按总原创 2021-07-22 21:42:10 · 110 阅读 · 0 评论 -
PAT 乙级 1014 福尔摩斯的约会
1014 福尔摩斯的约会大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写原创 2021-07-22 21:38:20 · 158 阅读 · 0 评论