
🌏个人博客主页:意疏-CSDN博客
希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~
阅读指南:
- 开篇说明
-
- 题目一、厘米换算英寸
- 题目二、然后是几点
- [题目三、 逆序的三位数](#题目三、 逆序的三位数)
- 题目四、BCD解密
- 题目五、表格输出
开篇说明
本文我们来写一下浙江大学PTA平台经典代码
题目一、厘米换算英寸
如果已知英制长度的英尺foot和英寸inch的值,那么对应的米数是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
输入格式:
输入在一行中给出1个正整数,单位是厘米。
输出格式:
在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。
英寸的值应该小于12.
输入样例:
170
输出样例
5 6
我们首先来看思路:
- 要定义三个整型变量 foot,inch和meter。
其中foot、inch用于存储转换后的英尺和英寸值,meter可以用来存储用户输入的米数。 - 其次我们还要读入一个整数 来存储到整型变量meter中。
- 然后我们将米数转换为英尺。因为1英尺等于30.448厘米,所以将米数除30.48即可得到英尺数。
- 最后我们还要计算剩余的英寸数,首先计算剩余的米数(meter - 30.48 * foot),然后再将其转换为英寸(剩余米数除30.48乘12)
- 这是示例代码:
c
#include <stdio.h>
int main()
{
int foot,inch;
int meter;*
scanf("%d",&meter);
foot = meter/30.48;
inch = (meter-30.48*foot)/30.48*12;
printf("%d %d\n",foot,inch);
return 0;
}
这是最终结果
题目二、然后是几点
有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。。
输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。
输出格式:
输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例
1310
我们首先来看思路:
- 输入解析:读取四位时间(如1120)和分钟数(如110)
- 时间拆分:1120 → 11小时20分
- 转分钟数:11×60+20=680分钟
- 时间计算:680+110=790分钟
- 转回时分:790→13小时10分(790÷60=13,790%60=10)
- 处理负数:若分钟为负,小时借1(如-30→小时-1,分钟+60)
- 输出格式:小时直接输出,分钟补零(如13:10→1310,5:05→505)
- 这是示例代码:
c
#include <stdio.h>
int main()
{
int foot,inch;
int meter;*
scanf("%d",&meter);
foot = meter/30.48;
inch = (meter-30.48*foot)/30.48*12;
printf("%d %d\n",foot,inch);
return 0;
}
这是最终结果
题目三、 逆序的三位数
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例
321
我们首先来看思路:
- 输入解析:读取一个三位正整数(如123)
- 数字分解 :
- 百位 = 原数 ÷ 100(123 → 1)
- 十位 = (原数 ÷ 10) % 10(123 → 2)
- 个位 = 原数 % 10(123 → 3)
- 反转重组 :
- 反转数 = 个位×100 + 十位×10 + 百位(3×100+2×10+1=321)
- 输出结果 :
- 直接输出反转后的整数(自动忽略前导零,如700反转后为7而非007)
这是最终结果
c
#include <stdio.h>
int main() {
int num;
scanf("%d", &num);
// 分解三位数的各位数字
int hundreds = num / 100; // 百位
int tens = (num / 10) % 10; // 十位
int ones = num % 10; // 个位
int reversed = ones * 100 + tens * 10 + hundreds;
printf("%d\n", reversed);
return 0;
}
- 这是最终结果:
题目四、BCD解密
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!
现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。
输入格式:
输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。
输出格式:
输出对应的十进制数。
输入样例:
18
输出样例
12
我们首先来看思路:
- 输入处理 :读取一个十进制整数 c。
进制转换:
计算 c 除以 16 的商(a = c / 16),得到十六进制的高位数字。
计算 c 除以 16 的余数(b = c % 16),得到十六进制的低位数字。 - 结果重组:将高位和低位数字组合为一个两位十进制数(answer = a * 10 + b)。
- 输出结果 :直接打印组合后的结果。
这是最终结果
c
#include <stdio.h>
int main(){
int a,b,c,answer;
scanf("%d",&c);
a = c / 16;
b = c % 16;
answer = a * 10 + b;
printf("%d",answer);
return 0;
}
- 这是最终结果:
题目五、表格输出
本题要求编写程序,按照规定格式输出表格。
输入格式:
本题目没有输入。
输出格式:
Province | Area(km²) | Pop.(10K) |
---|---|---|
Anhui | 139600.00 | 6461.00 |
Beijing | 16410.54 | 1180.70 |
Chongqing | 82400.00 | 3144.23 |
Shanghai | 6340.50 | 1360.26 |
Zhejiang | 101800.00 | 4894.00 |
我们首先来看思路: |
- 直接输出:将表格内容作为字符串常量直接嵌入到printf函数中。
- 格式控制:通过手动添加换行符\n和空格来控制表格的行和列对齐。
- 原封不动 :完全保留原始表格的格式,包括分隔线、列标题和数据行。
这是示例代码
c
#include <stdio.h>
int main (){
printf ("------------------------------------\nProvince Area(km2) Pop.(10K)\n------------------------------------\nAnhui 139600.00 6461.00\nBeijing 16410.54 1180.70\nChongqing 82400.00 3144.23\nShanghai 6340.50 1360.26\nZhejiang 101800.00 4894.00\n------------------------------------\n");
return 0;
}
- 这是最终结果:
意气风发,漫卷疏狂
学习是成长的阶梯,每一次的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中。
如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!
愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
我是意疏 下次见!