
PTA
作业记录
ღ江晚吟a
如果浮生若梦,万事无常,最终都归于尘土,那么也许我们的雄心壮志不过徒然为荒诞不经的玩笑而已。如果我们无可救药地执着于自己的意义,或许也只能安于自身的可笑。
展开
-
L1-049 天梯赛座位分配
思路就是按学校来排序,最后那个学校没排完,就最后那个学校隔一个座位排这里可以用一个二维数组mp[i][j]来判断,某个学校是否排完。源码#include<iostream>#include<cstdio>using namespace std;int n,t,f,g,num,mx,mp[105][105],arr[105][105];int main(){ scanf("%d",&n); for(int i = 1;i <= n.原创 2021-01-19 21:03:25 · 103 阅读 · 0 评论 -
关于求最大公约数和最小公倍数
最大公约数gcd辗转相除法int gcd(int x, int y){ int z = y; while(x%y!=0) { z = x%y; x = y; y = z; } return z;}穷举法int gcd(int x,int y){ int temp = 0; for(temp = x ; ; temp-- ) { if(x%temp == 0 && y%temp==0) break;原创 2021-01-17 19:39:53 · 175 阅读 · 0 评论 -
L1-039 古风排版
L1-039 古风排版1.思路1.先根据输入的数,确定字符的行数和列数2.再通过到过的方法,将字符输入二维数组中3.其中使用了metset(a,’\0’,sizeof(a)) 就是把二维数组用空格填充4.getchar() :在整数N后默认有个‘\n’,当输入一个数字,然后getchar()函数终止,再进入gets(s)2.getchar()使用getchar()时,在键盘上按一个字符后,要按回车才能读取进去3.源码#include<stdio.h>#include&原创 2020-07-28 07:11:06 · 521 阅读 · 1 评论 -
L1-020 帅到没朋友
L1-020 帅到没朋友思路看懂这个题目很重要,这个题目的意思就是寻找那些朋友圈只有自己或没有朋友圈的人,1.其中输入K大于2就意味着有朋友2.好多题目都差不多,还是用桶排序,给每个输入的数进行标记3.然后再次进行输入判定那些人没有朋友圈,再将其输出4.注意题目中不能有多余的空格,所以,先将第一个输出,再将其余的输出.源码#include<stdio.h>int main(){ int n,k,m,i,j,l; int a[100000]={0}; in原创 2020-07-27 22:46:35 · 96 阅读 · 0 评论 -
L1-031 到底是不是太胖了
L1-031 到底是不是太胖了1.思路看清题目很重要1.先根据输入的身高来求标准身高2.然后进行范围的判定,并输出相应的数据用到了 fabs() 求一个数的绝对值 头文件是 #include<math.h>2.源码#include<stdio.h>#include<math.h>int main(){ int n; int h,w; double wb; scanf("%d",&n); while(n--原创 2020-07-27 22:15:13 · 119 阅读 · 0 评论 -
L1-033 出生年
L1-033 出生年1.思路暴力解法:先用数组存放每个位数的数,然后用if判断不同数的个数。注意点:题目中输入的年份为1-3000,而进行不同位数的判定,则需要增加年限。2.源码#include<stdio.h>int main (){ int b[4]; int i,n,k=1,a; scanf("%d %d",&a,&n); for(i=a;i<10000;i++){ k=1; b[0]=i/原创 2020-07-27 21:52:34 · 118 阅读 · 1 评论 -
L1-025 正整数A+B(借鉴)
L1-025 正整数A+B1.思路1.可以用字符串的形式来输入A和B,其中空格可以使用 getchar() 把两个字符串分开2.用函数来进行A,B的判定3.判定字符串中1.是否有乱码,2.符号是否正确,3.数的位数是否正确2.源码#include<stdio.h>#include<string.h>int solve(char a[]) //确定数和判断数是否满足条件{ int len=strlen(a); int sum=0; for(int i=0原创 2020-07-27 21:14:20 · 87 阅读 · 0 评论 -
L1-040 最佳情侣身高差
L1-040 最佳情侣身高差1.思路简单题:可以使用结构体,也可以不用。注意细节就行了2.源码#include<stdio.h>struct node{ char sex[2]; float length;}p[11];int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%s %f",p[i].sex,&p[i].length)原创 2020-07-27 20:47:39 · 148 阅读 · 0 评论 -
L1-030 一帮一(结构体)
L1-030 一帮一1.思路1.先看题目,正偶数个学生,则可以考虑将其分成两部分(当时没注意这个条件,一脸懵逼),然后由上部分的学生和下部分的学生相匹配。2.这里也用到了结构体,太久没用了,做题时也没想到。3.利用for循环将学生进行匹配和输出,输出后,则将已输出的学生进行标记4.匹配后也要进行标记,以便跳出寻找的循环,重新进入匹配2.源码#include<stdio.h>#include<math.h>#include<string.h>struc原创 2020-07-27 19:43:03 · 283 阅读 · 0 评论 -
L1-027 出租(简单但繁琐)
L1-027 出租思路可以把题目分为五个部分1.先将电话号码的数字进行统计2.按大小顺序确定arr数组3.再根据arr数组确定index数组4.输出arr数组5.输出index数组确定arr数组的方法for(j=9;j>=0;j--){ //将arr数组按从大到小的顺序进行排序 if(b[j]!=0){ arr[k]=j; k++; } }源码#include<stdio.h>#include<string.h>原创 2020-07-27 18:52:13 · 124 阅读 · 0 评论 -
L1-032 Left-pad
L1-032 Left-pad思路这道题看起来比较简单,就是计较字符串的大小,然后将字符输出用scanf 不能输入空格,这是题目的坑点,搞得我想了很久。用gets可以输入空格盲点scanf输入字符串(含有空格的字符串,例如:“I love you!”)时,总是在空格处停止扫描。gets()函数 ,用gets()替代scanf();gets可以无限读取字符串,不会判断上限,以回车结束读取。源码#include<stdio.h>#include<string.h>原创 2020-07-27 18:04:25 · 160 阅读 · 0 评论 -
L1-034 点赞
L1-034 点赞思路看到这道题目就想到用桶排序,先把每个数出现的次数用数组的形式统计出来,然后看到题目中的编号大的输出,所以倒过来比较数出现的次数。这里也有过错误的想法,把数出现的次数按大小重新排序,但是这样就不知道哪个数最大了,源码#include<stdio.h>int main(){ int b[1000]={0}; int n,m,e=999,t; scanf("%d",&n); for(int i=0;i<n;i++)原创 2020-07-27 16:50:23 · 75 阅读 · 0 评论 -
L1-035 情人节
L1-035 情人节新知识~是按位取反scanf的返回值是输入值的个数如果没有输入值就是返回-1-1按位取反结果是0while(~scanf("%d", &n))就是当没有输入的时候退出循环思路接触到了一个重来没有用过的方法while(~scanf("%s",s)) 只要理解这句就很简单了其中break,跳出while循环源码#include<stdio.h>#include<string.h>int main(){ ch原创 2020-07-27 12:34:17 · 95 阅读 · 0 评论 -
L1-028 判断素数
L1-028 判断素数思路比较简单,就是看输入的数能否整除输入数的平方根源码#include<stdio.h>#include<math.h>int main(){ int k; scanf("%d",&k); while (k--) { int i,n,f=1; scanf("%d",&n); if(n==1) printf("No\n"); else { for(i=2;i<=sqrt(n);i++)原创 2020-07-27 12:02:33 · 187 阅读 · 0 评论 -
L1-023 输出GPLT
L1-023 输出GPLT思路就是用一个变量将字符串里的GPLT分别保存起来,跳过其他没用的字符。这里我用到了 switch 来统计GPLT的数量switch 的用法switch(a) a作为判断,若符合下面的语句,则执行语句。源码#include<stdio.h>#include<string.h>int main(){ char str[10001]; scanf("%s",str); int g=0,p=0,l=0,t=0;原创 2020-07-27 08:02:44 · 262 阅读 · 0 评论 -
L1-037 A除以B
L1-037 A除以B思路一直以来都被两个整型数相除怎么得到小数,为了做出这道题便搜了一下,原来只要在分母乘1.0就能解决问题了。源码#include<stdio.h>int main(){ int a,b; scanf("%d %d",&a,&b); if(b>0) printf("%d/%d=%.2f",a,b,a*1.0/ b); if(b<0) printf("%d/(%d)=%.2原创 2020-07-27 07:49:17 · 182 阅读 · 0 评论 -
L1-006 连续因子(没写出来)
L1-006 连续因子思路初看这道题的时候就很懵逼,自己也不会写,就去看了大佬的代码,刚看的时候还不是十分理解。然后自己慢慢想总算想明白了。1.由输入格式N在0到2^31, 在12和13的阶乘之间,所以连续因子最多为12个数相乘2.由输出1不算在内,则连续因子的判断从2开始3.还有一点连续因子第一个数必须要小于 sqrt(n)4.连续因子相乘后,然后进行判定,若能被整除,则输出,若不能,则进入for循环改变起点,从新进入判定5.如果输入的数为质数,则直接输出。源码#include&l原创 2020-07-24 14:49:07 · 95 阅读 · 0 评论 -
L1-005 考试座位号
L1-005 考试座位号思路先使用一个一维数组存放学生准考证,再用二维数组存试机,座位号考试座位号然后在输入待查询的号码,自己输入再利用for循环判断并输出 准考证号 考试座位号源码#include<stdio.h> int main(){ int n; scanf("%d",&n); long long a[n]; //储存学生准考证号 int b[n][2]; //试机座位号 考试座位号 int i,j; for(i=0; i<n; i++原创 2020-07-22 18:06:17 · 109 阅读 · 0 评论 -
L1-019 谁先倒
L1-019 谁先倒思路看到这个题目就想着用两个数组分别存甲乙的情况,但似乎有点麻烦,然后就用了一个二维数组,然后进行判断:先将甲乙划的加起来,然后在判断1.同输同赢情况 2.甲输的情况 3.乙输的情况最后判断谁喝醉了,再输出喝醉了的人和没喝醉的人喝了多少源码#include <stdio.h>int main (){ int jia_max , yi_max , n ; scanf("%d%d%d",&jia_max, &yi_max,&n);原创 2020-07-22 17:45:13 · 284 阅读 · 1 评论 -
L1-018 大笨钟
L1-018 大笨钟思路看到时间里面有个字符,就想到用字符数组来存放时间。然后的话,要进行时间的判断,则考虑将小时和分钟分别转化为整型。最后进行时间的判断和Dang的输出源码#include<stdio.h>int main(){ char time[5]; int hour,minute,count=0; scanf("%s",&time); hour=(time[0]-'0')*10+(time[1]-'0'); minu原创 2020-07-22 16:41:18 · 109 阅读 · 0 评论 -
L1-017 到底有多二
L1-017 到底有多二思路1.因为可能存在 ‘-’ 则用字符数组来存放整数,先判断是否有符号,确定倍数2.再使用for循环来确定2的个数和数字的个数,再判断是否为偶数3.注意点:还要进行四舍五入,如81.823可以先将其扩大100倍再加0.5为 8182.8 (如果小数点后三位大于5,再加0.5则会进一位,这就是四舍五入)转化为int型为8182,然后再除100.0就可以保留两位小数了源码#include <stdio.h>#include <stdlib.h>原创 2020-07-22 16:14:04 · 84 阅读 · 0 评论 -
L1-010 比较大小
L1-010 比较大小思路看到这题就想着排序,输入的数可以用数组存起来,然后就用排序源码#include<stdio.h>int main(){ int a[3],t; for(int i=0;i<3;i++) scanf("%d",&a[i]); for(int i=0;i<=1;i++) for(int j=i+1;j<=2;j++) { if(a[i]原创 2020-07-22 12:21:14 · 120 阅读 · 0 评论 -
L1-012 计算指数
L1-012 计算指数思路如题所说简单题,只有一个要注意的地方:n=0 时可以直接将 sum 输出源码#include<stdio.h>int main(){ int n,sum=1; scanf("%d",&n); if(n==0) printf("2^%d = %d",n,sum); for(int i=1;i<=n;i++) sum=sum*2; printf原创 2020-07-22 12:11:14 · 113 阅读 · 0 评论 -
L1-016 查验身份证
L1-016 查验身份证思路刚看这题的时候有点懵了,没看懂这题目是啥意思,便去百度搜了下。1.就是将身份证号码的前17位分别和权值相乘,再相加。(还要判断前17是否都为数字)2.将所得的和再求余113.所得的数作为下标,用M与身份证最后一位验证码判定,若相等则真确,若不等则错误。源码#include <stdio.h>#include<string.h>int main(){ int weight[17]={7,9,10,5,8,4,2,1,6,3,7,9,10原创 2020-07-22 12:02:04 · 389 阅读 · 0 评论 -
L1-008 求整数段和
L1-008 求整数段和思路初看这个题目就挺简单的,但也有几个要注意的地方1.用一个数来记录,数的个数,每5个就换行2. 5个字符宽向右对齐用 %5d表示还有一个坑人的地方,反正我是服了,S要大写源码#include<stdio.h>int main(){ int first,end; int sum=0; int i,t=0; scanf("%d %d",&first,&end); for(i=first;i<原创 2020-07-21 22:40:39 · 71 阅读 · 0 评论 -
L1-015 跟奥巴马一起画方块
L1-015 跟奥巴马一起画方块1.思路看到这个题目就想着用双重for循环列就是输入的整数n如果列是偶数,行就为n/2,如果列为奇数,行就是n/2+12.源码#include<stdio.h>int main(){ int line,i,row,t; char c; scanf("%d %c",&line,&c); if(line%2==0) row=line/2; else row=li原创 2020-07-19 20:54:37 · 105 阅读 · 0 评论 -
L1-014 简单题
L1-014 简单题思路乍眼一看有不合常理的简单,有点不相信,但就是送分题源码#include<stdio.h>int main(){ printf("This is a simple problem.");}原创 2020-07-19 20:20:36 · 165 阅读 · 0 评论 -
L1-013 计算阶乘和
L1-013 计算阶乘和1.个人思路看到这道题目的时候就想着用函数来求每个阶乘的和,然后就运用了函数来求,这道题感觉也挺简单的2.源码#include<stdio.h>int jiechen(int n){ int sum=1,j; for(j=1;j<=n;j++) sum*=j; return sum;}int main(){ int n,i; int all=0; scanf("%d",&n原创 2020-07-19 20:13:45 · 403 阅读 · 0 评论 -
L1-007 念数字
题目二维数组的知识//初始化 1.char c[3][8]={{"apple"},{"orange"},{"banana"}};等价于: 2.char c[3][8]={"apple","orange","banana"};//引用 char c[][10]={"apple","orange","banana"}; 1.printf ("%c",c[1][4]); //输出1行4列元素'g'字符 2.scanf ("%c",&c[2][3]); //输入一个字符到2原创 2020-07-19 09:26:10 · 82 阅读 · 0 评论 -
L1-004 计算摄氏温度
题目解题思路1.过于简单,不便描述。源码#include <stdio.h>int main(){ int F; scanf("%d",&F); { printf("Celsius = %d\n",5*(F-32)/9); } return 0;}原创 2020-07-18 10:29:34 · 95 阅读 · 0 评论 -
L1-003 个位数统计
个人解法思路1.先使用数组将整数N输入2.再创建一个一维数组,将要输出数的个数进行保存3.用if语句将判断的数进行保存4.输出每个数和每个数的个数缺点时间复杂度高源码#include<stdio.h>#include<string.h>int main(){ char a[10002]; int i; int b[10]={0}; scanf("%s",a); for(i=0;i<strlen(a);i++)原创 2020-07-18 10:20:02 · 144 阅读 · 0 评论 -
L1-002 打印沙漏
题目:打印沙漏解题思路:1.由沙漏的图形可知,把该图形分为上下两个部分2.运用等差数列求和公式,求出该沙漏的行数3.把该沙漏分为两部分,分别运用for循环将沙漏打印出来4.上部分可使用沙漏的行数-已打印的行数来打印每一行的字符5.下部分就从第二行开始,直接打印字符源码#include<stdio.h>int main(){ char c; int i,j; int h=0,n; scanf("%d %c",&n,&c); while(n-原创 2020-07-18 09:57:01 · 81 阅读 · 0 评论