
pat
XITMan
这个作者很懒,什么都没留下…
展开
-
pat乙级1095C语言
参考自其他博主#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct { char string[14]; char level[2]; /* use 2-char array to avoid reading problems */ int room; int date; int id; int score;}Info;原创 2020-06-06 10:38:43 · 676 阅读 · 0 评论 -
pat乙级1085C语言
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct//学生成绩结构。 { char num[8]; int score; char school[8];}student;typedef struct//学校结构。 { int rank; char school[8]; int scoreB; int scoreA; int scoreT; int sc原创 2020-06-06 10:33:22 · 434 阅读 · 0 评论 -
pat乙级1080C语言
#include<stdio.h>#include<string.h>#include<stdlib.h> typedef struct{ char szID[21]; int iPro; int iMid; int iFin; int iSum;} Student;//定义结构体,包含ID,编程成绩,期中成绩,期末成绩,总成绩 int cmp1(const void *a, const void *b)//按照ID排序的比较函数{原创 2020-06-06 10:26:29 · 443 阅读 · 0 评论 -
pat甲级1001C语言
这里和为0的时候单独输出0就可以了#include<stdio.h>int main(){ int a,b,count=0,c[100]={0}; scanf("%d%d",&a,&b); a=a+b; if(a==0) { printf("0"); return 0; } if(a<0) { printf("-"); a=-a;原创 2020-05-12 15:11:56 · 270 阅读 · 0 评论 -
pat乙级1094C语言
从开始遍历选第n位和后面的k-1位,将字符型转化位整型,然后判断是否是素数,是就输出,不是就重新遍历#include<stdio.h>#include<math.h>int sushu(int n){ for(int i=2;i<=sqrt(n);i++) { if(n%i==0) { return 0; } ...原创 2020-05-06 21:41:19 · 627 阅读 · 0 评论 -
pat乙级1093C语言
很简单,判断有没有重复就行了,有就下一个,没有就输出,并且标记。#include<stdio.h>int main(){ int a[127]={0}; int count=0; for(int i=0;i<2;i++) { char ch; while((ch=getchar())!='\n') { if(a[ch]=...原创 2020-05-05 11:15:12 · 544 阅读 · 1 评论 -
pat乙级1092C语言
#include<stdio.h>int main(){ int N,M,max=0; scanf("%d%d",&N,&M); int a[N]; for(int i=0;i<N;i++) { a[i]=0; } for(int i=0;i<M;i++) { for(int j=0;j<N;j++...原创 2020-05-05 11:01:44 · 419 阅读 · 3 评论 -
pat乙级1091C语言
这里算出平方乘K之后要取后几位和原来的数对比,这时候要%10(位数次方)就可以得到后几位了,这里我是写了个函数直接调用的。#include<stdio.h>int wei(int a){ int count=1; while(a) { count*=10; a/=10; } return count;}int main(){ in...原创 2020-05-05 10:31:11 · 495 阅读 · 0 评论 -
pat乙级1090C语言
第一遍写的时候没有考虑到交互(一个物品可能和多个物品相排斥),所以第一个测试点过不去,所以就只能用二维数组去记录排斥的物品,然后循环查找就可以输出结果了。//一维数组写的,测试点0无法通过#include<stdio.h>int main(){ int N,M,a[100001]={0},b[100][1000]={0}; scanf("%d%d",&N,&a...原创 2020-05-05 10:10:38 · 543 阅读 · 0 评论 -
pat乙级1089C语言
这里用循环遍历,假设2个狼的编号,然后判断输入有几个假(前2个循环是判断狼的编号,后一个是循环输入),超过2个就跳出然后重新循环狼的编号,如果全部输入只有2个假,这时候就要判断是否是一人一狼,是就输出,不是就继续循环。#include<stdio.h>int main(){ int N,a[101]={0},lie[2]={0},f=0; scanf("%d",&...原创 2020-05-05 09:06:12 · 426 阅读 · 0 评论 -
pat乙级1088C语言
按要求编写条件然后第一个符合的输出就可以了#include<stdio.h>#include<stdlib.h>int main(){ int M,X,Y; scanf("%d%d%d",&M,&X,&Y); for(int i=99;i>=10;i--) { int yi=i%10*10+i/10; ...原创 2020-05-05 08:09:36 · 372 阅读 · 0 评论 -
pat乙级1087C语言
最大N值为10000,所以最大输出为10333,数组记录值的个数就行,最后统计有值的个数即可。#include<stdio.h>int main(){ int N,count=0; scanf("%d",&N); int a[10334]={0}; for(int i=1;i<=N;i++) { a[i/2+i/3+i/5]++; ...原创 2020-05-04 16:23:35 · 382 阅读 · 1 评论 -
pat乙级1086C语言
这里要注意一个点就是开头的0不能要,后面的0要输出#include<stdio.h>int main(){ int a=0,b=0,ji=0,f=0; scanf("%d%d",&a,&b); ji=a*b; while(ji) { int temp=0; temp=ji%10; if(f==0) { ...原创 2020-05-04 16:16:59 · 477 阅读 · 0 评论 -
pat乙级1084C语言
写了个函数来变换,主要是比较前后字符是否相同来统计个数并且输出,这里定义的字符串长度要比较大,至少7万多吧,最后一个测试点要求的就是这个,然后输出就可以,主要在于函数的编写思路上吧。然后N=1的时候值就是它本身#include<stdio.h>#include<string.h>void print(char *a,char *b){ char ch=a[0]...原创 2020-05-04 15:34:55 · 455 阅读 · 0 评论 -
pat乙级1083C语言
定义一个数组记录差值个数即可#include<stdio.h>#include<math.h>int main(){ int N,a[10000]={0}; scanf("%d",&N); for(int i=0;i<N;i++) { int number=0; scanf("%d",&number); ...原创 2020-05-03 20:53:59 · 352 阅读 · 0 评论 -
pat乙级1082C语言
快排和结构体#include<stdio.h>#include<math.h>typedef struct{ int number; int x; int y; int distant;}people;int cmp(const void *a,const void *b){ people p1=*(people *)a; peop...原创 2020-05-03 20:40:40 · 383 阅读 · 0 评论 -
pat乙级1081C语言
获取字符统计字母数字小数点个数和判断有没有别的字符,最后按要求输出即可#include<stdio.h>int main(){ int n; scanf("%d",&n); getchar(); for(int i=0;i<n;i++) { char ch; int countshuzi=0,countzimu=0,countd...原创 2020-05-03 20:22:52 · 445 阅读 · 0 评论 -
pat乙级1079C语言
这里用整型做是不行的,因为他要求的倒数跟原来的数的位数一样,用整型的话要是原来的数的最后一位数是0,那倒数就少一位,所以最后肯定要用字符来做,下面的是整型做的,有2个测试点通不过的,明天用字符写完会改的。#include<stdio.h>int ishuiwen(int a){ int b=a,c=0; while(b) { c=c*10+b%10; ...原创 2020-05-03 16:06:58 · 409 阅读 · 1 评论 -
pat乙级1078C语言
用getchar输入,当压缩时用2个进行比较,得到重复字符的个数,当解压时,读取数字然后进行解压,这里要判断数字的位数,最后输出即可。#include<stdio.h>#include<ctype.h>int main(){ char ch,p[1000]; scanf("%c",&ch); getchar(); if(ch=='C') ...原创 2020-05-02 19:17:41 · 444 阅读 · 0 评论 -
PAT乙级2020年5月1号线上模拟3题答案(7-1Knuth洗牌法 7-2三阶幸福数 7-3垃圾分类)
这里我学的是c,所以都是用c写的,大概的思路我都写了,希望对大家有帮助吧。7-1 Knuth洗牌法 (20分)Knuth 洗牌法是生成 { 1, 2, …, n } 的一个随机重排列的算法。与每次反复随机生成一个数字,直到获得一个不重复的新数字的算法不同,Knuth 洗牌法从原始序列 { 1, 2, …, n } 开始,逐次洗牌。洗牌的方法是从左到右,每轮从没确定的数字中随机抽取一个数,把它放...原创 2020-05-02 15:36:55 · 779 阅读 · 1 评论 -
pat乙级1077C语言
先筛选符合条件的评分,然后快速排序然后去头尾,老师的单独输入记录,最后求结果即可。#include<stdio.h>#include<stdlib.h>int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}int main(){ int N,M,teacher; sc...原创 2020-04-30 16:23:44 · 392 阅读 · 0 评论 -
pat乙级1076C语言
#include<stdio.h>int main(){ int N; scanf("%d",&N); int mima[N]; char a[3]; for(int i=0;i<N;i++) { for(int j=0;j<4;j++) { scanf("%s",a); if(a[2]=='T'...原创 2020-04-30 15:17:06 · 505 阅读 · 0 评论 -
pat乙级1075C语言
代码参考于:https://blog.csdn.net/weixin_39345384/article/details/82502873跟1025的反转链表有相关,这里主要是找到链表中的负数,0-k之间的数,大于k的数3类,分别填入一个新的链表中,达到题目要求的效果,这里要遍历3次输入的链表,新的链表最后记得赋地址-1.#include<stdio.h>typedef stru...原创 2020-04-30 15:01:09 · 321 阅读 · 0 评论 -
pat乙级1074C语言
从尾部开始取,然后将要计算的字符转化为数字(这里要求最大20位,所以不能用整型),最后结果转化为字符型,最后判断是否全部为0,为0输出0,不为0输出字符串不为0部分。#include<stdio.h>#include<string.h>int main(){ char a[21],b[21],c[21],sum[22]={0}; int n,m,jinzh...原创 2020-04-30 14:14:57 · 417 阅读 · 0 评论 -
pat乙级1073C语言
跟1058的选择题差不多,但是1058是用字符进行判断的,但是这里用字符的话不能判断部分正确的情况,所以用整型进行判断会更好一些。#include<stdio.h>#include<stdlib.h>typedef struct{ int grade; int num; int t_num; int judge[5];}title;int m...原创 2020-04-30 12:05:04 · 401 阅读 · 1 评论 -
pat乙级1072C语言
这里要注意一下学生的名字输出和换行问题,其他比较输出就可以了#include<stdio.h>int main(){ int N,M,countthing=0,countpeople=0; scanf("%d%d",&N,&M); int thing[M]; for(int i=0;i<M;i++) { scanf("%d",&...原创 2020-04-29 20:40:15 · 374 阅读 · 2 评论 -
pat乙级1071C语言
我感觉我写的有点麻烦了,这里要注意的是当筹码=0的时候,要先输出剩余,然后再输出游戏结束。#include<stdio.h>int main(){ int T,K,a1,a2,b,t,money; scanf("%d%d",&T,&K); money=T; for(int i=0;i<K;i++) { scanf("%d%d%d...原创 2020-04-29 20:03:34 · 421 阅读 · 0 评论 -
pat乙级1070C语言
主要在于排好序就行了,因为要最大长度,所以先升序,把小的绳子先用掉,这样就能得到最大值了#include<stdio.h>#include<stdlib.h>int cmp(const void *a,const void *b){ return *(double *)a-*(double *)b;}int main(){ int N; dou...原创 2020-04-29 18:58:33 · 363 阅读 · 0 评论 -
pat乙级1069C语言
这里第一个中奖的要是大于输入数据的个数直接输出就可以了,因为没人中奖,然后就判断是否中过奖以及位置就可以了。#include<stdio.h>#include<string.h>int iswin(int *win, int l, int j, char a[][21]) { for (int i = 0; i < l; i++) { ...原创 2020-04-29 18:39:48 · 570 阅读 · 1 评论 -
pat乙级1068C语言
这里有个坑就是输出是列行,不注意看就会写反,结果找半天,很难找到,所以读题目要小心。#include<stdio.h>#include<stdlib.h>int judge(int a[][1002],int x,int y,int tol){ if(abs(a[x][y]-a[x-1][y-1])<=tol ||abs(a[x][y]-a[x-...原创 2020-04-29 16:23:09 · 428 阅读 · 1 评论 -
pat乙级1067C语言
这里输入之前一定要读取第一行的回车,然后输出错误答案的时候答案可能比20个字符大,所以后面还要getchar来输出错误的后面部分。#include<stdio.h>#include<string.h>int main(){ char a[21],b[21],c; int N; scanf("%s%d",a,&N); getchar(); ...原创 2020-04-29 14:32:06 · 355 阅读 · 0 评论 -
pat乙级1066C语言
#include<stdio.h>int main(){ int M,N,min,max,replace,pixel; scanf("%d%d",&M,&N); scanf("%d%d%d",&min,&max,&replace); for(int i=0;i<M;i++) { for(int j=0;j&l...原创 2020-04-28 21:07:50 · 379 阅读 · 1 评论 -
pat乙级1065C语言
其实这题挺简单的,卡在置数上太久了int a[100]={-1};只有第一个变-1(一直以为是全部赋值),然后用memset置数就可以了#include<stdio.h>#include<stdlib.h>#include<string.h>int cmp(const void *a,const void *b){ return *(int...原创 2020-04-28 20:58:30 · 366 阅读 · 1 评论 -
pat乙级1064C语言
输入的时候求一下他的各个位的和然后存在以一个数组里面,最后输出就可以了(从小到大),还要一个计数的。#include<stdio.h>#include<string.h>int main(){ int N,count=0; scanf("%d",&N); int a[N],b[N],c[37]={0}; memset(b,0,sizeof(b...原创 2020-04-28 15:55:31 · 368 阅读 · 0 评论 -
pat乙级1063C语言
#include<stdio.h>#include<math.h>int main(){ int N,a,b,max=0; double f=0.00; scanf("%d",&N); for(int i=0;i<N;i++) { scanf("%d %d",&a,&b); if(a*a+b*b>...原创 2020-04-28 13:24:39 · 333 阅读 · 0 评论 -
pat乙级1062C语言
这里要定义一个公约数函数来判断是否是最简。然后我们求的数要在2个给定的分数之间,同时满足这2个条件就可以输出,要注意空格的输出即可。#include<stdio.h>int gys(int a,int b){ if(a%b==0) { return b; } else { gys(b,a%b); }}int main(){ i...原创 2020-04-27 20:53:00 · 365 阅读 · 0 评论 -
pat乙级1061C语言
2个for循环比较就可以了,很简单#include<stdio.h>#include<string.h>int main(){ int N,M; scanf("%d%d",&N,&M); int grade[M],true[M]; for(int i=0;i<M;i++) { scanf("%d",&gra...原创 2020-04-27 19:33:13 · 343 阅读 · 0 评论 -
pat乙级1060C语言
第一遍写的时候是想直接2个for循环套出来的,但是有个测试点会超时,所以就先排序然后比较他的位置和骑车距离,因为最大的距离都在前面如果我的距离比位置要小了,那就说明不符合了,取前一个即可。9 8 7 6 5 4 3 2 11 2 3 4 5 6 7 8 9当位置为6时4<6,当位置为5时5=5符合条件的,所以取N为5第一遍写的,有个测试点会超时#include<stdio.h...原创 2020-04-27 18:13:20 · 355 阅读 · 1 评论 -
pat乙级1059C语言
定义一个函数判断素数,然后将输入的序号存放在一个数组中记录排名,然后对需要输出的进行比对,第一和素数还有其他以及多次出现的要判断,这里我在一次过后对这个序号的排名赋值10001,第二次出现就可以找出。#include<stdio.h>#include<math.h>int sushu(int a){ for(int i=2;i<=sqrt(a);i++)...原创 2020-04-27 17:37:18 · 355 阅读 · 0 评论 -
pat乙级1058C语言
这里基本分为2步,读取正确的答案,读取考生的答案判断对错,最后输出。判断可以用strcmp对比2个字符是否相同,这里建议统一用字符形式做,这样后面比较好比较。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>typedef struct{ in...原创 2020-04-27 16:21:43 · 447 阅读 · 1 评论