🌏個人博客主頁:意疏-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)
- 這是示例代碼:
#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)
- 這是示例代碼:
#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)
這是最終結果
#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)。
- 輸出結果:直接打印組合后的結果。
這是最終結果
#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(km2) | 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和空格來控制表格的行和列對齊。
- 原封不動:完全保留原始表格的格式,包括分隔線、列標題和數據行。
這是示例代碼
#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;
}
- 這是最終結果:
意氣風發,漫卷疏狂
學習是成長的階梯,每一次的積累都將成為未來的助力。我希望通過持續的學習,不斷汲取新知識,來改變自己的命運,并將成長的過程記錄在我的博客中。
如果我的博客能給您帶來啟發,如果您喜歡我的博客內容,請不吝點贊、評論和收藏,也歡迎您關注我的博客。
您的支持是我前行的動力。聽說點贊會增加自己的運氣,希望您每一天都能充滿活力!
愿您每一天都快樂,也歡迎您常來我的博客。我叫意疏,希望我們一起成長,共同進步。
我是意疏 下次見!