三個數字題
一、#713 ─ Adding Reversed Numbers
題目:按這裡。
說明:輸入兩個整數,將兩數分別反轉後兩相加,相加後的結果再反轉後輸出。
由於這個程式要做三次的反轉,所以我們把這個反轉的程式部分寫成函數 Rev():
int Rev(int n)
{
int r=0;
while(n>0) {
r=r*10+(n%10);
n/=10;
}
return r;
}
接下來整個程式就很簡單了:
#include <stdio.h>
int Rev(int n)
{
int r=0;
while(n>0) {
r=r*10+(n%10);
n/=10;
}
return r;
}
void main()
{
int a, b;
scanf("%d %d", &a, &b);
a=Rev(a);
b=Rev(b);
printf("%d\n",Rev(a+b));
}
最後,這個題目和之前連續輸入的形式不同,它是先輸入一個數字代表要計算的次數,之後每行再輸入我們要計算的兩個數字,所以我們的程式再改成下面的樣子:
#include <stdio.h>
int Rev(int n)
{
int r=0;
while(n>0) {
r=r*10+(n%10);
n/=10;
}
return r;
}
void main()
{
int a, b, n, i;
scanf("%d", &n);
for(i=0; i<n; i++) {
scanf("%d %d", &a, &b);
a=Rev(a);
b=Rev(b);
printf("%d\n",Rev(a+b));
}
}
二、#579 ─ ClockHands
題目:按這裡。
說明:以 HH:MM 的格式輸入一個時間,輸出該時間的時針與分針的夾角(輸出到小數後三位)。
這個題目的輸入格式是 HH:MM 的格式,我們還是可以直接用 scanf("%d:%d", &h, &m) 的方式還讀取輸入的資料。接下來計算完時針與分針各別的角度求兩者的差,並用下面的規則處理:
我們把這些想法寫成程式:
#include <stdio.h>
void main()
{
int h, m;
float dh, dm, d;
scanf("%d:%d", &h, &m);
dm=m*6;
dh=h*30+m*0.5;
d=dh-dm;
if(d<0) d=-d;
if(d>=360) d=d-360;
if(d>=180) d=360-d;
printf("%.3f\n", d);
}
最後,我們把這個程式改寫成連續輸入的方式,如果輸入 0:00 則程式結束:
#include <stdio.h>
void main()
{
int h, m;
float dh, dm, d;
while(1) {
scanf("%d:%d", &h, &m);
if( (h==0) && (m==0) ) break;
dm=m*6;
dh=h*30+m*0.5;
d=dh-dm;
if(d<0) d=-d;
if(d>=360) d=d-360;
if(d>=180) d=360-d;
printf("%.3f\n", d);
}
}
三、#591 ─ Box of Bricks
題目:按這裡。
說明:先輸入一個整數 n,代表下面有幾堆方塊,接下來有 n 個整數分別為這 n 堆方塊的高度,輸出要讓每一堆都一樣高的情況下,要搬動的方塊數 k。
這一題只要算出這幾堆方塊的平均高度,再計算每一堆高度和平均高度的差的總和的一半即可。或者,只要計算比平均高度高的方塊堆的和平均高度差的總和也可以。程式如下:
#include <stdio.h>
void main()
{
int n, h[50], i, s, k;
scanf("%d", &n);
s=0;
for(i=0; i<n; i++) {
scanf("%d", &h[i]);
s+=h[i];
}
s/=n;
k=0;
for(i=0; i<n; i++)
if(h[i]>s) k+=(h[i]-s);
printf("The minimum number of moves is %d.\n", k);
}
最後,我們再改成程式所要求的樣子:
#include <stdio.h>
void main()
{
int n, h[50], i, s, k, t=1;
while(1) {
scanf("%d", &n);
if(n==0) break;
s=0;
for(i=0; i<n; i++) {
scanf("%d", &h[i]);
s+=h[i];
}
s/=n;
k=0;
for(i=0; i<n; i++)
if(h[i]>s) k+=(h[i]-s);
printf("Set #%d\n", t++);
printf("The minimum number of moves is %d.\n\n", k);
}
}