![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
(PTA)基础编程题目集(C语言实现)
记录个人解题思路
王二的门下走狗
这个作者很懒,什么都没留下…
展开
-
7-33 | 有理数加法
本题要求编写程序,计算两个有理数的和。输入格式:输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。输出格式:在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。输入样例1:1/3 1/6输出样例1:1/2输入样例2:4/3 2/3输出样例2:2题目解答:#include <stdio.h>//最大公约数int GCD原创 2021-12-22 16:52:36 · 110 阅读 · 0 评论 -
7-38 | 数列求和-加强版
题目:给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1,N=3时,S=1+11+111=123。输入格式:输入数字A与非负整数N。输出格式:输出其N项数列之和S的值。题目解答:S=A+AA+AAA+⋯+AA⋯A(N个A);N的最大值为10万,10万位以上的整数值结果肯定就只能用数组保sum[]保存了。考虑A=9,N=3;结果应该是:9+99+999;我们从个位、十位、百位的位的角度来看这个.原创 2021-12-10 10:45:07 · 886 阅读 · 0 评论 -
7-37 | 整数分解为若干项之和
题目:解答:#include "stdio.h"void print(int len);void dfs(int fore,int last,int index);int N,arr[31];int cnt=0;//深度优先搜索int main(){ scanf("%d",&N); //一般情况下将保证第一个数不大于剩余的数,即{1,6}、{2,5}、{3,4}…… for(int i=1;i<=N/2;i++){ dfs(i原创 2021-12-13 15:02:17 · 658 阅读 · 0 评论 -
7-36 | 复数四则运算
题目:解答:个人认为需要注意的地方是对负数的四舍五入;#include "stdio.h"#include "math.h"void rounding(float *f){ int flag=*f<0?-1:1; int i=abs((int)(*f*100)); if(i%10<5){ i=i/10; }else{ i=i/10+1; } *f=flag==1?(float)i/10.0:原创 2021-12-13 16:12:21 · 247 阅读 · 0 评论 -
7-35 | 有理数均值
题目:本题要求编写程序,计算N个有理数的平均值。输入格式:输入第一行给出正整数N(≤100);第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。输出格式:在一行中按照a/b的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。题目解答:个人觉得需要注意的地方就是输入分数时就必须化简,不然无法通过第三个测试点。#include <stdio.h原创 2021-12-13 10:19:00 · 415 阅读 · 0 评论 -
7-34 | 通讯录的录入与显示
题目:解答:#include "stdio.h"struct Information{ char name[11];//姓名 char date[11];//生日 char sex[2];//性别 char num1[17];//固话 char num2[17];//手机号};int main(){ int N,K,i; struct Information information[10]; scanf("%d\n",.原创 2021-12-13 09:15:42 · 1844 阅读 · 6 评论 -
7-32 | 说反话-加强版
题目:解答:#include "stdio.h"#include "string.h"int main(){ char words[500001]; int start,end,i; int flag=-1; gets(words); end=strlen(words)-1; while(end>=0){ //如果end遇到字母,则让start向前遍历找到单词的开头 if(words[end]==' '){ end--; }else{ .原创 2021-12-12 22:04:00 · 268 阅读 · 0 评论 -
7-31 | 字符串循环左移
题目:解答:#include <stdio.h>#include <string.h>int main(){ char str[101]; int N,len,i,j; gets(str); scanf("%d\n",&N); //求字符串长度 len1=strlen(str); for(j=0,i=N%len;j<len;i++,j++){ printf("%c",str[i%原创 2021-12-12 20:52:49 · 252 阅读 · 0 评论 -
7-30 | 字符串的冒泡排序
题目:解答:#include "stdio.h"#include "string.h"void swap_str(char *str1,char *str2){ int i=0; for(;i<11;i++){ char temp=str1[i]; str1[i]=str2[i]; str2[i]=temp; }}//和一般的冒泡排序相比,比较的是字符串的大小,交换的是两个字符串int main(.原创 2021-12-12 19:36:30 · 369 阅读 · 0 评论 -
7-29 | 删除字符串中的子串
题目:解答:解法中,运用了kmp算法的思想,即无须再次判断最大公共前缀中的字符子串。#include <stdio.h>#include <string.h>//重合总长为s2的长度len2时,将s1中的子串全部置为000……void delete(char *s1,int i,int j){ for(;j>0;i--){ if(s1[i]!='0'){ s1[i]='0'; j-原创 2021-12-13 10:15:31 · 617 阅读 · 0 评论 -
7-28 | 猴子选大王
题目:解答:这道题,就是典型的约瑟夫环问题,可以采用数学方法解决,当然也可以用数组或者循环链表模拟报数过程。在这里,简单介绍以下数学思路。假设有5个猴,那么第一轮报数为:1 2 3 1 2,我们可以简单的分析得到,我们每一轮只用关心3是谁,所以我们可以对每一轮的猴进行标号。1——2——3——4——5 ------- 4=(1+3)%5 倒序第五轮3——4——出局——1——2 ...原创 2021-12-12 16:57:45 · 806 阅读 · 2 评论 -
7-27 | 冒泡法排序
题目详情:解答:冒泡法排序注意升序还是降序就就可以了。#include <stdio.h>void swap(int *a,int *b){ int temp=*a; *a=*b; *b=temp;}int main(){ int N,K; scanf("%d %d",&N,&K); int nums[100]; for(int i=0;i<N;i++){ scanf("%d .原创 2021-12-10 10:43:06 · 189 阅读 · 0 评论 -
7-26 | 单词长度
题目详情:解答:#include "stdio.h"void print(int *sign,int *cnt){ //为了解决连续空格的情况,只有cnt对应的值大于0(即两个空格直接有单词)才进行处理 if(*cnt>0){ if(*sign==1){ printf(" "); } printf("%d",*cnt); *sign=1; *cnt=0; }原创 2021-12-10 10:35:01 · 207 阅读 · 0 评论 -
7-25 | 念数字
题目详情:解答:#include <stdio.h>//正序打印数字拼音void print_number(int x){ char *str[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; if(x>9){ print_number(x/10); printf(" %s",str[x%10]); }else{ prin.原创 2021-12-10 10:33:03 · 190 阅读 · 0 评论 -
7-24 | 约分最简分式
题目详情:解答:#include <stdio.h>int GCD(int a,int b){ int temp; if(a<b){ temp=a; a=b; b=temp; } while(b>0){ temp=a%b; a=b; b=temp; } return a;}int main(){ int a,b.原创 2021-12-10 10:30:32 · 84 阅读 · 0 评论 -
7-23 | 币值转换
题目解答:这里,我们采取了分段处理,每四位是一个段,即9_9999_9999;具体处理看代码即可。#include <stdio.h>void print(int x);int main(){ int x; scanf("%d", &x); int head=-1; if (x == 0)//x初始值为0,特殊处理 { printf("a"); } else { if (x..原创 2021-12-10 10:26:41 · 660 阅读 · 0 评论 -
7-22 | 龟兔赛跑
题目详情:解答: 这道题,我们模拟了龟兔赛跑的过程,根据最终x,y的结果来判断。#include<stdio.h>void judge();int T,x=0,y=0;int main(){ scanf("%d",&T); while(T>0){ judge(); } if(x>y){ printf("@_@ %d",x); }else if(x==y){ ...原创 2021-12-10 10:14:46 · 184 阅读 · 0 评论 -
7-21 | 求特殊方程的正整数解
题目详情:解答:#include<stdio.h>#include<math.h>int main(){ int N; scanf("%d",&N); int x=1; int sign=-1; //x>0,y>0,x<=y,所以x^2<=y^2,x^2<=N/2 while(x*x<=N/2){ int y=(int)sqrt(N-x*x); .原创 2021-12-10 09:56:31 · 300 阅读 · 0 评论 -
7-20 | 打印九九口诀表
学习目标:下面是一个完整的下三角九九口诀表:1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49原创 2021-12-10 09:33:05 · 380 阅读 · 0 评论 -
7-19 支票面额
题目:一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?输入格式:输入在一行中给出小于100的正整数n。输出格式:在一行中按格式y.f输出该支票的原始面额。如果无解,则输出No Solution。题目解答:#include<stdio.h>int main(){ //求f元y分; int n,f,y; //n分 f*100+y=2y*100原创 2021-12-10 09:24:10 · 532 阅读 · 0 评论 -
7-18 | 二分法求多项式单根
题目:二分法求函数根的原理为:如果连续函数f(x)在区间[a,b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0。二分法的步骤为:检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2;否则 如果f(a)f(b)<0,则计算中点的值f((a+b)/2); 如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根;否则 如果f((a+b)/2)与f(a)同号,则说明根在区间[(a+b)/2,b],令a=(a+b)/2原创 2021-12-09 09:44:59 · 218 阅读 · 0 评论 -
7-17 | 爬动的蠕虫
题目:一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。输入格式:输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。输出格式:在一行中输出蠕虫爬出井的时间,以分钟为原创 2021-12-09 09:33:51 · 540 阅读 · 0 评论 -
7-16 | 求符合给定条件的整数集
题目:给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。输入格式:输入在一行中给出A。输出格式:输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。题目解答:#include<stdio.h>int main(){ int A; scanf("%d",&A); int cnt=0; for(int i=A;i<A+4;i++){原创 2021-12-09 09:15:07 · 80 阅读 · 0 评论 -
7-15 | 计算圆周率
题目:根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。输入格式:输入在一行中给出小于1的阈值输出格式:在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位题目解答:#include<stdio.h>int main(){ double judge; scanf("%lf",&judge); int n1=1,n2=3; double n3=1.0,ret=1.0; do{ n3*原创 2021-12-09 09:10:18 · 181 阅读 · 0 评论 -
7-14 | 求整数段和
题目:给定两个整数A和B,输出从A到B的所有整数以及这些数的和输入格式:输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。输出格式:首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。题目解答:#include<stdio.h>int main(){ int n1,n2; //sum是总和,cnt记录当前行已打印的数量 int原创 2021-12-09 09:00:17 · 94 阅读 · 0 评论 -
7-13 | 日K蜡烛图
题目:股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开盘价格Open(早上刚刚开始开盘买卖成交的第1笔价格)、收盘价格Close(下午收盘时最后一笔成交的价格)、中间的最高价High和最低价Low。如果Close<Open,表示为“BW-Solid”(即“实心蓝白蜡烛”);如果Close>Open,表示为“R-Hollow”(即“空心红蜡烛”);如果Ope原创 2021-12-09 08:55:35 · 352 阅读 · 0 评论 -
7-12 | 两个数的简单计算器
题目:本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。输入格式:输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零输出格式:当运算符为+、-、*、/、%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR题目解答:#include <stdio.h>原创 2021-12-09 08:51:19 · 166 阅读 · 0 评论 -
7-11 | 分段计算居民水费
题目:为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x−17.5。请编写程序实现水费的计算。输入格式:输入在一行中给出非负实数x。输出格式:在一行输出应交的水费,精确到小数点后2位。题目解答:#include<stdio.h>int main(){ float ton; scanf("%f",&ton); if(ton&l原创 2021-12-09 08:45:52 · 283 阅读 · 0 评论 -
7-10 | 计算工资
题目:某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。输入格式:输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。输出格式:在一行输出该员工的周薪,精确到小数点后2位。题目解答:这原创 2021-12-09 08:45:13 · 211 阅读 · 0 评论 -
7-9 | 用天平找小球
题目:三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。输入格式:输入在一行中给出3个正整数,顺序对应球A、B、C的重量。输出格式:在一行中输出唯一的那个不一样的球。题目解答:#include<stdio.h>int main(){ int n1,n2,n3; scanf("%d %d %d",&n1,&n2,&n3); if(n1==n2) printf("C"原创 2021-12-09 08:42:37 · 182 阅读 · 0 评论 -
7-8 | 超速判断
题目:模拟交通警察的雷达测速仪。输入汽车速度,如果速度超出60 mph,则显示“Speeding”,否则显示“OK”。输入格式:输入在一行中给出1个不超过500的非负整数,即雷达测到的车速。输出格式:在一行中输出测速仪显示结果,格式为:Speed: V - S,其中V是车速,S或者是Speeding、或者是OK。题目解答:#include<stdio.h>int main(){ int v; scanf("%d",&v); if(原创 2021-12-08 10:23:51 · 205 阅读 · 0 评论 -
7-7 | 12-24小时制
题目:编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。输入格式:输入在一行中给出带有中间的:符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。提示:在scanf的格式字符串中加入:,让scanf来处理这个冒号。输出格式:在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零原创 2021-12-08 10:21:38 · 295 阅读 · 0 评论 -
7-6 | 混合类型数据格式化输入
题目:本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。输入格式:输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。输出格式:在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。输入样例:2.12 88 c 4.7//结尾无空行输出格式:c 88 2.12 4.70//结尾无空行题目解答:int main(){ float f1,f2;原创 2021-12-08 10:16:35 · 243 阅读 · 0 评论 -
7-5 | 表格输出
题目:本题要求编写程序,按照规定格式输出表格。输入格式:无输出格式:要求严格按照给出的格式输出下列表格:------------------------------------Province Area(km2) Pop.(10K)------------------------------------Anhui 139600.00 6461.00Beijing 16410.54 1180.70Chongqing原创 2021-12-08 10:13:33 · 87 阅读 · 0 评论 -
7-4 | BCD解密
题目:BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。输入格式:输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会原创 2021-12-08 10:11:08 · 87 阅读 · 0 评论 -
7-3 | 逆序的三位数
题目:程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。输入格式:每个测试是一个3位的正整数。输出格式:输出按位逆序的数。输入样例:123输出样例:321题目解答:本题可以采用递归的方法倒序打印,也可以将n逆序后再打印。#include<stdio.h>//sign用来判断是否是前导0void print_reverse(int n,int sign)原创 2021-12-08 09:41:34 · 105 阅读 · 0 评论 -
7-2 | 然后是几点
题目:有时候人们用四位数字表示一个时间,比如1106表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为530;0 点 30 分表示为030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。输入格式:输入在一行中给出 2 个整数,分别是四位数字表示的起始...原创 2021-12-08 09:47:11 · 91 阅读 · 0 评论 -
7-1 | 厘米换算英尺英寸
题目:如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。输入格式:输入在一行中给出1个正整数,单位是厘米。输出格式:在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。输入样例:170输出样例:5 6题目解答:#include <stdio.h>int main(){原创 2021-12-08 09:19:23 · 289 阅读 · 0 评论 -
6-13 | 折半查找
题目:给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)用来二分地查找k在数列中的位置。函数接口分析:int Search_Bin(SSTable T, KeyType k)其中T是有序表,k是查找的值。题目分析:对于有序数组(包括有序数组的旋转形式)而言,二分查找永远是好的选择。有一句话叫“二分查找:思路很简单,细节是魔鬼”,所以建议大家多回顾回顾二分。有关二分的文章有很多,这里就不赘述了,希望了解的小伙伴可以去查查。题目解答:原创 2021-12-08 09:03:01 · 1108 阅读 · 0 评论 -
6-12 | 判断奇偶性
题目:本题要求实现判断给定整数奇偶性的函数。函数接口分析:int even( int n );其中n是用户传入的整型参数。当n为偶数时,函数返回1;n为奇数时返回0。注意:0是偶数。题目解答:int even( int n ){ return (n+1)%2;}...原创 2021-12-07 22:02:48 · 118 阅读 · 0 评论