TPA部分试题.docx
《TPA部分试题.docx》由会员分享,可在线阅读,更多相关《TPA部分试题.docx(44页珍藏版)》请在冰豆网上搜索。
TPA部分试题
《算法与程序设计》PTA习题集
第4周
本题目要求计算下列分段函数f(x)的值:
输入格式:
输入在一行中给出实数x。
输出格式:
在一行中按“f(x)=result”的格式输出,其中x与result都保留一位小数。
输入样例1:
10
输出样例1:
f=
输入样例2:
0
输出样例2:
f=
#include<>
intmain()
{
floatx,result;
scanf("%f",&x);
if(x==0)
{
result=0;
}
else
{
result=x;
}
printf("f(%.1f)=%.1f",x,result);
return0;
}
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
输入格式:
输入在一行中给出带有中间的:
符号(半角的冒号)的24小时制的时间,如12:
34表示12点34分。
当小时或分钟数小于10时,均没有前导的零,如5:
6表示5点零6分。
提示:
在scanf的格式字符串中加入:
,让scanf来处理这个冒号。
输出格式:
在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。
如5:
6PM表示下午5点零6分。
注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:
00就是12小时制的12:
0PM;而0点被认为是第二天的时间,所以是0:
0AM。
输入样例:
21:
11
输出样例:
9:
11PM
#include<>
intmain()
{
inta,b;
scanf("%d:
%d",&a,&b);if(a>12)
{
printf("%d:
%d",a-12,b);
}
if(a==12)
{
printf("%d:
%d",a,b);
}
if(a<12)
{
printf("%d:
%dAM",a,b);
}
else
{
printf("PM",a,b);
}
return0;
}
给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。
输入格式:
输入在一行中顺序给出六个[−100,100]范围内的数字,即三个点的坐标x1、y1、x2、y2、x3、y3。
输出格式:
若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L=周长,A=面积”,输出到小数点后2位。
输入样例1:
456978
输出样例1:
L=,A=
输入样例2:
468121218
输出样例2:
Impossible
#include<>
intmain()
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c);if((a+b>c)&&(b+c>a)&&(a+c>b))
{
printf("YES");
}
else
{
printf("NO");
}
return0;
}
输入一个年份,判断其是否为闰年,若是闰年输出“yes”的信息,否则输出“no”的信息。
输入格式:
直接输入一个4位数年份,没有其它任何附加字符。
输出格式:
直接输出“yes”或“no”,没有其它任何附加字符。
输入样例:
1900输出样例:
no
输入样例:
2000输出样例:
yes
输入样例:
1904输出样例:
yes
#include<>
intmain()
{
inta;
scanf("%d",&a);
if(a%4==0&&a%100!
=0||a%400==0)
{
printf("yes\n");
}
else
{
printf("no\n");
}
return0;
}
输入三个整数x,y,z,请把这三个数由小到大输出。
输入格式:
在一行中直接输入3个整数,之间各用一个空格间隔。
输出格式:
在一行中按照“x=最小值,y=次小值,z=最大值”的顺序输出结果,最大值、次大值和最小值均原样输出,没有宽度控制。
输入样例:
213输出样例:
x=1,y=2,z=3
#include<>
intmain()
{
intx,y,z,temp;
scanf("%d%d%d",&x,&y,&z,&temp);
if(x>y)
{
temp=x,x=y,y=temp;
}
if(x>z)
{
temp=x,x=z,z=temp;
}
if(y>z)
{
temp=y,y=z,z=temp;
}
printf("x=%d,y=%d,z=%d",x,y,z);
return0;
}
第5周
本题要求编写程序将一个百分制成绩转换为五分制成绩。
转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在一行中给出一个整数的百分制成绩。
输出格式:
在一行中输出对应的五分制成绩。
输入样例:
90输出样例:
A
#include<>
intmain()
{
inta,ch;
scanf("%d",&a);
if(a>90||a==90)
{
ch='A';
}
elseif(a>80||a==80)
{
ch='B';
}
elseif(a>70||a==70)
{
ch='C';
}
elseif(a>60||a==60)
{
ch='D';
}
else
{
ch='E';
}
printf("%c",ch);
return0;
}
中国有句俗语叫“三天打鱼两天晒网”。
假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”
输入格式:
输入在一行中给出一个不超过1000的正整数N。
输出格式:
在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“indayN”。
输入样例1:
103
输出样例1:
Fishinginday103
输入样例2:
34
输出样例2:
Dryinginday34
#include<>
intmain()
{
intN;
scanf("%d",&N);
if(N%5==4||N%5==0)
{
printf("Dryinginday%d",N);
}
else
{
printf("Fishinginday%d",N);
}
return0;
}
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。
题目保证输入和输出均不超过整型范围。
输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。
操作数的数据类型为整型,且保证除法和求余的分母非零。
输出格式:
当运算符为+、-、*、/、%时,在一行输出相应的运算结果。
若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR。
输入样例1:
-7/2输出样例1:
-3
输入样例2:
3&6输出样例2:
ERROR
#include<>
intmain()
{
intx,y;
charch;
scanf("%d%c%d",&x,&ch,&y);
switch(ch)
{
case'+':
printf("%d\n",x+y);
break;
case'-':
printf("%d\n",x-y);
break;
case'*':
printf("%d\n",x*y);
break;
case'/':
printf("%d\n",x/y);
break;
case'%':
printf("%d\n",x%y);
break;
default:
printf("ERROR\n");
break;
}
return0;
}
股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。
以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:
开盘价格Open(早上刚刚开始开盘买卖成交的第1笔价格)、收盘价格Close(下午收盘时最后一笔成交的价格)、中间的最高价High和最低价Low。
如果Close<<>>Open,表示为“R-Hollow”(即“空心红蜡烛”);如果Open等于Close,则为“R-Cross”(即“十字红蜡烛”)。
如果Low比Open和Close低,称为“LowerShadow”(即“有下影线”),如果High比Open和Close高,称为“UpperShadow”(即“有上影线”)。
请编程序,根据给定的四个价格组合,判断当日的蜡烛是一根什么样的蜡烛。
输入格式:
输入在一行中给出4个正实数,分别对应Open、High、Low、Close,其间以空格分隔。
输出格式:
在一行中输出日K蜡烛的类型。
如果有上、下影线,则在类型后加上with影线类型。
如果两种影线都有,则输出withLowerShadowandUpperShadow。
输入样例1:
输出样例1:
BW-SolidwithLowerShadowandUpperShadow
输入样例2:
输出样例2:
R-Cross
输入样例3:
输出样例3:
R-Hollow
#include<>
#include<>
intmain()
{
doubleopen,high,low,close;
scanf("%lf%lf%lf%lf",&open,&high,&low,&close);
if(closeprintf("BW-Solid");
elseif(close>open)
printf("R-Hollow");
elseif(fabs(close-open)==0)
printf("R-Cross");
if((lowopen&&high>close))
printf("withLowerShadowandUpperShadow\n");
elseif(lowprintf("withLowerShadow\n");
elseif(high>open&&high>close)
printf("withUpperShadow\n");
return0;
}
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。
注意:
闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
输出样例1:
61
输入样例2:
2000/03/02
输出样例2:
62
#include<>
intmain()
{
intday,month,year;
scanf("%d/%d/%d",&year,&month,&day);
inti;
intsum;
sum=day;
for(i=1;i{
switch(i)
{
case1:
sum+=31;break;
case3:
sum+=31;break;
case5:
sum+=31;break;
case7:
sum+=31;break;
case8:
sum+=31;break;
case10:
sum+=31;break;
case12:
sum+=31;break;
case4:
sum+=30;break;
case6:
sum+=30;break;
case9:
sum+=30;break;
case11:
sum+=30;break;
case2:
if((year%4==0&&year%100!
=0)||(year%400==0))
{
sum+=29;
}else
{
sum+=28;
}
}
}
printf("%d\n",sum);
return0;
}
第6周
三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。
找出这个不一样的球。
输入格式:
输入在一行中给出3个正整数,顺序对应球A、B、C的重量。
输出格式:
在一行中输出唯一的那个不一样的球。
输入样例:
112输出样例:
C
#include<>
intmain()
{
inta,b,c;
charch;
scanf("%d%d%d",&a,&b,&c);
if(a==b)
{
ch='C';
}
elseif(a==c)
{
ch='B';
}
else
{
ch='A';
}
printf("%c\n",ch);
return0;
}
某公司员工的工资计算方法如下:
一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的倍计酬。
员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。
新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。
请按该计酬方式计算员工的工资。
输入格式:
输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。
输出格式:
在一行输出该员工的周薪,精确到小数点后2位。
输入样例1:
540输出样例1:
输入样例2:
350输出样例2:
#include<>
intmain()
{
inttime,year;
doublemoney;
scanf("%d%d",&year,&time);
if(year>=5)
{
if(time<=40)
{
money=time*50;
}
else
{
money=2000+(time-40)*50*;
}
}
else
{
if(time<=40)
{
money=time*30;
}
else
{
money=1200+(time-40)*30*;
}
}
printf("%.2lf\n",money);
return0;
}
输入三个实数,代表三条线段的长度。
判断这三条线段组成的三角形是什么类型:
等边(equilateraltriangle)、等腰(isoscelestriangle)、不等边(commontriangle)或不能构成三角形(notatriangle)。
输入格式:
输入三条线段的长度,输入保证所有数据均大于0。
输出格式:
输出三角形的类型:
等边(equilateraltriangle)、等腰(isoscelestriangle)、不等边(commontriangle)或不能构成三角形(notatriangle)。
输入样例:
333###输出样例:
equilateraltriangle
#include<>
intmain()
{
floata,b,c;
scanf("%f%f%f",&a,&b,&c);
if(a+b<=c||a+c<=b||b+c<=a)
{
printf("notatriangle\n");
}
elseif(a==b&&b==c)
{
printf("equilateraltriangle\n");
}
elseif(a==b||b==c||a==c)
{
printf("isoscelestriangle\n");
}
else
{
printf("commontriangle\n");
}
return0;
}
有一分段函数如下:
根据输入的x值,计算对应的y值。
输入格式:
输入x。
输出格式:
输出y的值,保留两位小数。
#include<>
#include<>
intmain()
{
doublex,y;
scanf("%lf",&x);
if(x<-1)
{
y=pow(x,3)-1;
}
if(x>=-1&&x<=1)
{
y=-3*x+1;
}
if(x>1&&x<=10)
{
y=3*exp(2*x-1)+5;
}
if(x>10)
{
y=5*x+3*log10(2*x*x-1)-13;
}
printf("%.2f",y);
return0;
}
第7周
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
输入格式:
输入为10个字符。
最后一个回车表示输入结束,不算在内。
输出格式:
在一行内按照letter=英文字母个数,blank=空格或回车个数,digit=数字字符个数,other=其他字符个数的格式输出。
输入样例:
aZ&
09Az输出样例:
letter=4,blank=3,digit=2,other=1
#include<>
intmain()
{
intl=0,b=0,d=0,o=0,i=1;
charch;
scanf("%c",&ch);
while(i<=10)
{
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
{
l++;
}
elseif(ch>='0'&&ch<='9')
{
d++;
}
elseif(ch==''||ch=='\n')
{
b++;
}
else
{
o++;
}
scanf("%c",&ch);
i++;
}
printf("letter=%d,blank=%d,digit=%d,other=%d",l,b,d,o);
return0;
}
本题要求编写程序,找出给定一系列整数中的最小值。
输入格式:
输入在一行中首先给出一个正整数nnn,之后是nnn个整数,其间以空格分隔。
输出格式:
在一行中按照“min=最小值”的格式输出nnn个整数中的最小值。
输入样例:
4-2-1231000
输出样例:
min=-123
#include<>
intmain()
{
intn,x,y,i=1,min;
scanf("%d%d",&n,&x);
min=x;
while(i{
scanf("%d",&y);
if(min>y)
{
min=y;
}
else
{
min=min;
}
i++;
}
printf("min=%d\n",min);
return0;
}
本题要求计算给定的一系列正整数中奇数的和。
输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。
当读到零或负整数时,表示输入结束,该数字不要处理。
输出格式:
在一行中输出正整数序列中奇数的和。
输入样例:
87437056101-1
输出样例:
116
#include<>
intmain()
{
intn,sum=0;
scanf("%d",&n);
while(n>0)
{
if(n%2==0)
{
sum=sum;
}
else
{
sum=sum+n;
}
scanf("%d",&n);
}
printf("%d\n",sum);
return0;
}
输入若干学生成绩,以负数结束输入。
计算所有学生的平均成绩并统计成绩在80到90分(不含90)之间的人数。
输入格式:
在一行输入几个百分制实型成绩,数据之间以一个空格间隔。
输入负数结束输入。
输出格式:
在一行中按照“ave=平均分,n=人数”的顺序输出结果,其中平均分要求保留两位小数,人数是正整数。
输入样例:
58898455-1输出样例:
ave=,n=2
#include<>
intmain()
{
intx,n=0,sum=0,i=0;
scanf("%d",&x);
while(x>=0)
{
i++;
if(x>=80&&x<90)
{
n=n+1;
}
sum=sum+x;
scanf("%d",&x);
}
printf("ave=%.2f,n=%d\n",sum*i,n);
return0;
}
对于给定的正整数N,求它的位数及其各位数字之和。
输入格式:
输入在一行中给出一个不超过10910^9109的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
输入样例:
321输出样例:
36
#include<>
intmain()
{
intn,x,i=0,sum=0;
scanf("%d",&n);
while(n!
=0)
{
sum=sum+n%10;
n=n/10;
i++;
}
printf("%d%d\n",i,sum);
return0;
}
第8周
以下程序统计输入的一行字符中字母、数字、空格、其它字符的个数(行末以换行符结束,最后的换行符不统计在内)。
例如,输入的一行字符为aB3*则字母有2个,数字有1个,空格有1个,其它字符有1个。
#include<>
intmain()
{
intletters,digits,spaces,others;
letters=0,digits