本文结合PTA专项练习带领读者掌握顺序结构,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。
7-1 是不是太胖了
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)
输入格式:
输入第一行给出一个正整数H
(100 < H ≤ 300),为某人身高。
输出格式:
在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。
输入样例:
169
输出样例:
124.2
代码如下:
#include <stdio.h> int main() { int h; scanf("%d",&h); double bz; bz=(h-100)*0.9*2; printf("%.1f",bz); }
7-2 计算存款利息
本题目要求计算存款利息,计算公式为interest=money×(1+rate)^year−money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。
输入格式:
输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。
输出格式:
在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。
输入样例:
1000 3 0.025
输出样例:
interest = 76.89
代码如下:
#include <stdio.h> #include <math.h> //pow功能为计算(1+rate)的year次幂,返回幂指数的结果 int main() { double money,year,rate; scanf("%lf %lf %lf",&money,&year,&rate); double inter; inter=money*pow((1+rate),year)-money; printf("interest = %.2f",inter); }
7-3 整数算术运算
本题要求编写程序,计算并输出2个正整数的和、差、积、商与余数。题目保证输入和输出全部在整型范围内。
输入格式:
输入在一行中给出2个正整数A和B。
输出格式:
在5行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商与余数。
输入样例:
5 3
输出样例:
在这里给出相应的输出。例如:
5 + 3 = 8 5 - 3 = 2 5 * 3 = 15 5 / 3 = 1 5 % 3 = 2
代码如下:
#include <stdio.h> int main() { int a,b; scanf("%d %d",&a,&b); printf("%d + %d = %d\n",a,b,a+b); printf("%d - %d = %d\n",a,b,a-b); printf("%d * %d = %d\n",a,b,a*b); printf("%d / %d = %d\n",a,b,a/b); printf("%d %% %d = %d\n",a,b,a%b); }//注意取余号的表示方法
7-4 21-大鸟转转转实验室
Dayu2001在实验室看到Stump在研究四位数,突发奇想想要把这个四位数反转一下, 比如4396反转后变成6934。 Stump提醒Dayu2001不是所有的四位数都可以反转,比如2200反转后变成0022是不合法的。 Dayu2001不想理会这么繁琐的细节,四位数反转后的前导0都忽略不计。 现在输入Dayu2001反转后的数,请问反转前的数是多少?
输入格式:
仅一个整数 n 。
输出格式:
反转前的四位数n(数据保证反转前1000≤n≤9999)。
输入样例:
22
输出样例:
在这里给出相应的输出。例如:
2200
代码如下:
#include <stdio.h> int main() { int n; scanf("%d",&n); int a,b,c,d; a=n/1000; b=n/100%10; c=n%100/10; d=n%10; printf("%d",d*1000+c*100+b*10+a); }
7-5 21-石头剪刀布
dls 和sld 要来一次紧张刺激的石头剪刀布大赛。
通过观察,Yoshinow发现出石头、剪刀、步的概率分别为p1,p2和p3 ,而sld 为q1,q2,q3 。
他们共进行了n次比赛,Yoshinow 想知道dls 获胜次数的期望为多少?
输入格式:
输入共三行,第一行包含一个整数n (1<=n<=1e4) ,表示比赛轮数;
第二行包含三个两位小数,表示dls 出石头、剪刀、布的概率分别为p1,p2,p3;
第三行包含三个两位小数,表示sld 出石头、剪刀、布的概率分别为q1,q2,q3;
概率保证均为[0,1] 内的数字。
输出格式:
仅一行包括一个数,表示dls 获胜次数的期望。
输出精确到小数点后4位。
输入样例1:
1 0.30 0.40 0.30 0.10 0.20 0.70
输出样例1:
0.3700
输入样例2:
10 1.00 0.00 0.00 0.10 0.20 0.70
输出样例2:
2.0000
代码如下:
#include <stdio.h> int main() { int n; scanf("%d",&n); double p1,p2,p3; scanf("%lf %lf %lf",&p1,&p2,&p3); double q1,q2,q3; scanf("%lf %lf %lf",&q1,&q2,&q3); double qw; qw=(p1*q2+p2*q3+p3*q1)*n; printf("%.4f",qw); }//注意期望的计算公式
7-1 顺序 - A-B
相信很多刚刚接触编程的人做的第一道题就是a+b,小明觉得很奇怪,为什么是a+b而不是a-b呢?所以小明这里要求大家做一次减法。当然单纯的a-b太简单了,所以小明提出了一个要求,那就是输出a-b结果的十位数,请大家编程满足这个奇怪的要求。
输入格式:
输入为一行,包含两个整数a,b(0<a,b<10000),以空格作为间隔。
输出格式:
输出为一个数代表a-b的十位数
输入样例:
1323 1254
输出样例:
6
代码如下:
#include <stdio.h> int main() { int a,b; scanf("%d %d",&a,&b); printf("%d",(a-b)%1000%100/10); }
7-2 顺序 - 彩色链子
某天盖茨不知道从哪里弄来n种颜色的珠子,你可以认为这些颜色的珠子足够使用。现在盖茨想把他们串起来,做成一条由4个珠子组成的长条形的链子,为了美观,要求相邻的珠子颜色不能一样,盖茨想知道能编成几种不同的链子。
输入格式:
输入一行,仅包含一个整数n,代表盖茨拥有的珠子的颜色数量。
输出格式: 输出一行,包含一个整数,代表能编成的不同链子的种类数。
输入样例:
5
输出样例:
320
代码如下:
#include <stdio.h> int main() { int n; scanf("%d",&n); printf("%d",n*(n-1)*(n-1)*(n-1)); }//类似于涂色问题
7-3 顺序 - 鸡兔同笼
鸡兔同笼是我国古代著名趣题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”这四句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头;从下面数,有94只脚。问笼中各有几只鸡和兔? 经过运算我们可以很快的得出兔子有12只,小鸡有23只。
现在请你编写一个程序,输入笼中头的个数H 和 脚的只数 F,输出笼中各有几只鸡和兔。
输入格式:
输入为标准输入,输入共一行,包含两个正整数a和b,用空格隔开,分别表示笼子中头和脚的数量。且满足(0<a<100,0<b<400)。输入应保证问题有解。
输出格式:
输出仅一行,包含两个整数,用空格分隔。分别代表鸡和兔子的数量。
输入样例:
2 4
输出样例:
2 0
代码如下:
#include <stdio.h> int main() { int h,f; scanf("%d %d",&h,&f); int a,b; b=(f-2*h)/2; a=h-b; printf("%d %d",a,b); }//设h为头数量,f为脚数量,a为鸡数量,b为兔数量
7-4 顺序 - 买房
马斯克要买房子啦。大家都知道,房子是很贵的,所以他不能全款买房子,于是他决定贷款。
银行规定贷款的金额不能超过房子总价的70%,而且必须是整数万元。例如房子的总价是100万元,那么贷款的金额最多是70万元。
那么现在马斯克的钱不是那么的多,但是他的计算能力太差了,于是他需要你帮他计算出他能贷款的最大金额。
(友情提示:此题有坑点,大家小心)
输入格式:
输入一个正整数N,表示房子的总价格(单位是万元,不超过int)
输出格式:
输出一个整数,表示最大贷款金额(单位为万元)
输入样例:
100
输出样例:
70
代码如下:
#include <stdio.h> int main() { double n; scanf("%lf",&n); int c=n*7/10; printf("%d",c); }
7-5 顺序 - 三角形
毕达哥拉斯学了一年c语言,但是他现在不想做题。给你a,b,c三个整数作为三角形的三边,请你依次输出角A(b和c的夹角)、角B(a和c的夹角)、角C(a和b的夹角)的余弦值(之间用一个空格隔开,保留六位小数)。
输入格式:
输入只有一行三个整数:
a,b,c(0<a,b,c<=1000)。
输出格式:
输出角A(b和c的夹角)、角B(a和c的夹角)、角C(a和b的夹角)的余弦值(之间用一个空格隔开,保留六位小数)
输入样例:
1 1 1
输出样例:
在这里给出相应的输出。例如:
0.500000 0.500000 0.500000
代码如下:
#include <stdio.h> int main() { int a,b,c; scanf("%d %d %d",&a,&b,&c); double A,B,C; A=(b*b+c*c-a*a)/(2.0*b*c); B=(a*a+c*c-b*b)/(2.0*a*c); C=(b*b-c*c+a*a)/(2.0*b*a); printf("%.6f %.6f %.6f",A,B,C); }//注意是2.0而不是2
7-6 顺序 - 飞机
陶喆的飞机又延误了,飞机本来是h1:m1:s1起飞,但现在已经h2:m2:s2了,请问陶喆已经等了多少秒(两个时间点在同一天,采用二十四小时计时法,且h2:m2:s2的时间会靠后)
输入格式:
输入两行分别为两个时间点(符合时间显示规则):
h1 m1 s1
h2 m2 s2
0<=h1,h2<=23
0<=m1,m2,s1,s2<=59
输出格式:
输出等待的秒数
输入样例:
在这里给出一组输入。例如:
18 30 00 19 00 00
输出样例:
在这里给出相应的输出。例如:
1800
代码如下:
#include <stdio.h> int main() { int h1,h2,m1,m2,s1,s2; scanf("%d %d %d %d %d %d",&h1,&m1,&s1,&h2,&m2,&s2); printf("%d",(h2-h1)*3600+(m2-m1)*60+s2-s1); }
7-7 顺序 - wifi密码
火星哥到学校的第一件事就是连上学校的WiFi,已知初始密码是学号的后六位。
输入格式:
输入长度为长度为8的学号(10000000~99999999)
输出格式:
输出对应的密码(注意前导0)
输入样例:
31702101
输出样例:
在这里给出相应的输出。例如:
702101
代码如下:
#include <stdio.h> int main() { int n; scanf("%d",&n); int a,b,c,d,e,f; a=n%10; b=n%100/10; c=n%1000/100; d=n%10000/1000; e=n%100000/10000; f=n%1000000/100000; printf("%d%d%d%d%d%d",f,e,d,c,b,a); }
7-8 顺序 - 正六边形
现在要计算正六边形的面积,确保六条边均为整数。
输入格式:
输入一个整数:a(0< a <= 100)
输出格式:
输出正六边形的面积S(保留两位小数)
输入样例:
2
输出样例:
在这里给出相应的输出。例如:
10.39
代码如下:
#include <stdio.h> #include <math.h> int main() { int a; scanf("%d",&a); printf("%.2f",1.5*sqrt(3.0)*a*a); }//sqrt用于计算算数平方根的结果
7-9 顺序 - 字符转换
现在有2个字母,第一个字母为小写字母,第二个字母为大写字母,请你将小写转化为大写,大写转化为小写。
输入格式:
输入只有一行,含有2个字母
输出格式:
输出转化后的字母(两字母中含有一个空格,行末换行)
输入样例:
a B
输出样例:
在这里给出相应的输出。例如:
A b
代码如下:
#include <stdio.h> int main() { char a,b; scanf("%c %c",&a,&b); printf("%c %c",a-32,b+32); }
7-10 顺序 - 果汁的零花钱
果汁(PS:这是一个小朋友的名字)想让他的妈妈给他点零花钱,妈妈决定第一天给他一块钱,以后的每一天就再多给他一块钱,果汁打算忍痛攒钱。请问在第n天的时候他有多少钱呢?
输入格式:
输入只有一行一个整数:
n(0<n<=1000)
输出格式:
输出得到的钱数
输入样例:
6
输出样例:
在这里给出相应的输出。例如:
21
代码如下:
#include <stdio.h> int main() { int n; scanf("%d",&n); int sum; sum=(1+n)*n/2; printf("%d",sum); }//等差数列求和
7-11 顺序 - 你迟到了
爱因斯坦和海森堡约好早上一起去学习的,但是爱因斯坦又赖床睡过了头,海森堡从m1分s1秒等到了m2分s2秒,他想要知道自己等了爱因斯坦多久,请你帮他算一下吧(m1、s1,m2、s2处于同一小时内,且保证m2、s2在m1、s1在之后)!
输入格式:
输入有两行:
第一行为等待的起始时刻:
m1 s1 (0<=m1,s1<=59)
第二行为等待的结束时刻:
m2 s2 (0<=m2,s2<=59)
输出格式:
输出等待的时间(格式为 xx:yy)
输入样例1:
3 8 9 15
输出样例1:
06:07
输入样例2:
3 8 3 15
输出样例2:
00:07
代码如下:
#include <stdio.h> int main() { int m1,s1,m2,s2; scanf("%d %d %d %d",&m1,&s1,&m2,&s2); int a,b; a=(m2-m1)*60+s2-s1; printf("%02d:%02d",a/60,a%60); }//不足两位自动补0
7-12 顺序 - 买花
粉红猪惹呲溜喵生气了,于是粉红猪决定到花店给呲溜喵买她喜欢的花,粉红猪知道呲溜喵喜欢玫瑰,月季和茉莉花,已知花店有a朵玫瑰,b朵月季,c朵茉莉,花店的老板说这3种花只有以下的情况能够结成花束:
玫瑰和月季长相相似能够相互替代,只要有任意种类的3朵就能结成一束,而茉莉花比较特殊,不能自己单独成束,必须搭配一朵玫瑰或者月季才能成束(即茉莉花成束条件为:茉莉+月季或茉莉+玫瑰,此时花束仅需2朵花),请问现在花店中花的数目最多能够扎成几束呲溜喵喜欢的花束?
输入格式:
输入只有一行三个整数:
a,b,c(0<c<=a,b<=1000)
输出格式:
输出最多能够扎成的花束
输入样例:
20 30 2
输出样例:
在这里给出相应的输出。例如:
18
代码如下:
#include <stdio.h> int main() { int a,b,c; scanf("%d %d %d",&a,&b,&c); int sum=0; sum=(a+b-c)/3+c; printf("%d",sum); }//先分配c
7-13 顺序 - 剪绳子
在挑选完花后,高斯需要礼品绳将花朵绑起来,老板有一条长L米的礼品绳,需要将礼品绳截成长为x米的小段,请问老板能截成几小段呢,如果截完后礼品绳有剩,剩了多少米呢?(结果保留一位小数)
输入格式:
输入只有一行两个数:
L x ( 0<=L<=x<=1000)
输出格式:
输出能截的段数和剩余的长度(中间用空格隔开,行末换行):
输入样例:
在这里给出一组输入。例如:
15.0 5.0
输出样例:
在这里给出相应的输出。例如:
3 0.0
代码如下:
#include <stdio.h> int main() { double l,x; scanf("%lf %lf",&l,&x); int a; a=l/x; printf("%d %.1f",a,l-a*x); }
7-14 顺序 - 方和圆
已知一个圆的半径r,请问你能求出它的外接正方形和内接正方形的面积,和正方形内接时占圆的百分比,正方形外接时,圆占其的百分比嘛?(π取3.14 ,结果保留2位小数)
输入格式:
输入只有一行一个整数:
r ( 0<=r<=100)
输出格式:
第一行输出内接正方形的面积和正方形内接时的占比中间用一个空格隔开。
第二行输出外接正方形的面积和外接时的占比同样用空格隔开。
输入样例:
3
输出样例:
18 63.69% 36 78.50%
代码如下:
#include <stdio.h> int main() { int r; scanf("%d",&r); int s1=2*r*r; double zb=s1/(3.14*r*r); int s2=4*r*r; double zb1=(3.14*r*r)/s2; printf("%d %.2f%%\n",s1,zb*100); printf("%d %.2f%%",s2,zb1*100); }
7-15 顺序 - 最短路
在一个8*8的棋盘上,国王的家在A1的位置,现在国王站在棋盘的某一个位置,他感到十分的疲惫,于是他想尽快回到自己的家,请告诉他最少可以走几步回到自己的家
(国王只能向上下左右四个格子走,走一格算一步。)
输入格式:
输入一行,为国王现在的坐标。
棋盘的坐标由两个字符组成,第一个是一个大写字母(从A到H),第二个是一个数字(从1到8)。
输出格式:
输出国王回家所需的最短距离。
输入样例:
H1
输出样例:
7
代码如下:
#include <stdio.h> int main() { int a; char c; scanf("%c%d",&c,&a); printf("%d",(a-1)+(int)(c-'A')); }
7-16 顺序 - ASCII码值
给定一个字符,请输出他的ASCII码值。
输入格式:
输入仅有一个可见字符。
输出格式:
输出给定字符的ASCII码值。
输入样例:
a
输出样例:
97
代码如下:
#include <stdio.h> int main() { char c; scanf("%c",&c); printf("%d",c); }
7-17 顺序 - 矩阵坐标
在9*9的矩阵中,每个点都可以表示成一个坐标,坐标由两个字符组成,第一个是一个大写字母(从A到I),第二个是一个数字(从1到9)。
小明写坐标时总是不规范,比如A1位置,小明有时写成“A 1”,有时写成“A,1”,有时写成“A.1”。现在小明想把从前写的坐标都规范化成“(x,y)”形式,即A1位置写成“(A,1)”形式。
输入格式:
输入仅有一行,包含一个坐标,坐标的两个字符会用一个空格或者一个逗号或者一个点隔开。
输出格式:
输出规范化的坐标形式,即“(x,y)”形式(输出不包括引号)。
输入样例:
A 1
输出样例:
在这里给出相应的输出。例如:
(A,1)
代码如下:
#include <stdio.h> int main() { int a;char b,c; scanf("%c%c%d",&c,&b,&a); printf("(%c,%d)",c,a); }//空格 逗号 点 都算字符
7-18 顺序 - 摆火柴棒
Alice很喜欢摆火柴棒玩,她经常用火柴棒摆成各种奇奇怪怪的图案。
现在她有N(N为偶数)根火柴棒,她可以将这些火柴棒摆成一个长方形,但是她惊奇的发现不是每次摆成的长方形面积都相同。
假设每根火柴棒的长度相同,横截面半径长度不记,现在她想知道可以摆成的长方形最大面积是多少。
由于Alice很爱惜这些火柴棒,她不允许将任意一个火柴棒折断。
输入格式:
输入仅有一行,包含一个偶数N(4<=N<=10000),即火柴棒的个数。
输出格式:
输出仅有一行,包含一个整数,为长方形的最大面积。
输入样例1:
8
输出样例1:
4
输入样例2:
10
输出样例2:
6
代码如下:
#include <stdio.h> int main() { int n;scanf("%d",&n); int a=n/4; int b=n/2-n/4; printf("%d",a*b); } //长宽最接近的时候面积最大
7-19 顺序 - 青春广场
位于福大生活一区的青春广场是一个大小为n*m的长方形。为了更好地让同学们在青春广场上开展活动,现准备将青春广场用正方形花岗岩石板重新铺一遍。每一个正方形花岗岩石板边长为a。
请问最少需要多少石板才能覆盖整个青春广场?覆盖范围可以大于青春广场,但是切割石板是不允许的。
输入格式:
输入包含3个正整数:n,m,a(1<=n,m,a<=10000)
分别代表青春广场的长度,宽度和石板的边长。
输出格式:
输出最少需要的石板的数量。
输入样例:
6 6 4
输出样例:
4
代码如下:
#include <stdio.h> #include <math.h> int main() { //将青春广场的长度和宽度分别除以石板的边长 //并向上取整得到所需的石板行数和列数。 //然后将行数和列数相乘即可得到最少需要的石板数量。 double n,m,a; scanf("%lf%lf%lf",&n,&m,&a); double h=n/a; double h1=ceil(h); double s=m/a; double s1=ceil(s); printf("%d",(int)(s1*h1)); }
也可以用这种方法:
#include <iostream> using namespace std; int main() { int n, m, a; cin >> n >> m >> a; // 计算需要的石板数量 int num = ((n + a - 1) / a) * ((m + a - 1) / a); cout << num; }
7-20 顺序 - 简化的A+B
小明今年3岁了, 现在他已经能够认识100以内的非负整数, 并且能够进行100以内的非负整数的加法计算。
对于大于等于100的整数, 小明仅保留该数的最后两位进行计算, 如果计算结果大于等于100,那么小明也仅保留计算结果的最后两位。
例如, 对于小明来说: 1) 1234和34是相等的 2) 35+80=15
给定非负整数A和B, 你的任务是代表小明计算出A+B的值。
输入格式:
输入包含两个非负整数A和B (A和B均在int型可表示的范围内)。
输出格式:
对于所给数据,输出小明A+B的结果。
输入样例:
35 80
输出样例:
在这里给出相应的输出。例如:
15
代码如下:
#include <stdio.h> int main() { int a,b; scanf("%d %d",&a,&b); a=a%100; b=b%100; int sum=a+b; sum=sum%100; printf("%d",sum); }
7-21 顺序 - 八进制
给定一个十进制数,把它转化为八进制数。
HINT: 可以查查输出格式符
输入格式:
输入仅有一行,包含一个十进制数。
输出格式:
输出转化为八进制后的数。
输入样例:
9
输出样例:
11
代码如下:
#include <stdio.h> int main() { int a; scanf("%d",&a); printf("%o",a); }
7-22 顺序 - 台上一分钟台下十年功
俗话说“台上一分钟台下十年功”,我们观看了一个演员的表演,不知道他到底训练多久,根据给出表演的时间,现在你的任务是要帮忙计算出演员的训练时间,训练时间以年为单位。
输入格式:
输入包含3个整数 a,b,c。表示表演了a天b小时c分钟。(0<=a,b,c<=10^6)
输出格式:
输出一个数表示训练时间多少年。
输入样例:
1 2 3
输出样例:
15630
代码如下:
#include <stdio.h> int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%d",a*24*60*10+b*60*10+c*10); }
7-23 顺序 - 十位数是多少
小明刚学习了C 语言刚学习到取模运算。他知道如果要知道一个数个位上的数值只需对10取摸即可。现在他遇到一个问题。求一个大于等于10的正整数的十位上的数字是多少。
现在请你替他想办法求出这个数。
输入格式:
输出 a (10<=a<=10^9);
输出格式:
输出一整数表示a十位上的数字
输入样例:
110
输出样例:
1
代码如下:
#include <stdio.h> int main() { int a; scanf("%d",&a); a=a%100; a=a/10; printf("%d",a); }
7-24 顺序 - 三角形面积
给定三条边,输出三角形的面积。
海伦公式:
假设三边长为a,b,c;
p=(a+b+c)/2
则三角形面积的平方s^2=p*(p-a)(p-b)(p-c)
输入格式:
输入数据包含三个正数a, b, c。其中a, b, c <1000。
输出格式:
输出三角形的面积,结果保留两位小数。
输入样例:
3 4 5
输出样例:
6.00
代码如下:
#include <stdio.h> #include <math.h> int main() { double a,b,c; scanf("%lf%lf%lf",&a,&b,&c); double p=(a+b+c)/2.0; double s=p*(p-a)*(p-b)*(p-c); printf("%.2f",sqrt(s)); }//注意是除以2.0而不是2
7-25 顺序 - 距离
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
HINT:需要用到<math.h>中的sqrt函数。
输入格式:
输入数据由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。
输出格式:
输出一行,表示两点间距离,结果保留两位小数。
输入样例:
1 1 0 0
输出样例:
1.41
代码如下:
#include <stdio.h> #include <math.h> int main() { double x1,y1,y2,x2; scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2); printf("%.2f",sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))); }