部分A+B問題描述:
正整數 A 的“DA(爲 1 位整數)部分”定義爲由 A 中所有 DA 組成的新整數 PA。例如:給定 A=3862767,DA=6,則 A 的“6 部分”PA 是 66,因爲 A 中有 2 個 6。
現給定 A、DA、B、DB,請編寫程序計算 PA+PB。
輸入格式:
輸入在一行中依次給出 A、DA、B、DB,中間以空格分隔,其中 0<A,B<1010。
輸出格式:
在一行中輸出 PA+PB 的值。
輸入樣例 1:
3862767 6 13530293 3
輸出樣例 1:
399
輸入樣例 2:
3862767 1 13530293 8
輸出樣例 2:
0
思路:
枚舉PA的每一位,如果與DA相同,就執行 PA = PA * 10 +DA。PB同理可得,最後輸出PA+PB。
爲了簡化代碼定義一個函數getP()。注意題目的範圍是1010,所以用long long定義A和B。
#include <cstdio>
int main()
{
long long a,b,da,bd;
scanf("%lld%lld%lld%lld",&a,&b,&da,&bd);
long long pa = 0,pb = 0;
while (a%10 == da) //枚舉a的每一位,%10的意思是每次取最低位
{
pa = pa * 10 +da; //如果當前位爲da,給pa增加一位pa
a = a/10; // /10的意思是每次取前(n-1)位
}
while (b%10 == bd)
{
bd = bd*10+bd;
b = b /10;
}
printf("%lld\n",pa+pb);
return 0;
}
程序運行時間題目描述:
要獲得一個 C 語言程序的運行時間,常用的方法是調用頭文件 time.h,其中提供了 clock() 函數,可以捕捉從程序開始運行到 clock() 被調用時所耗費的時間。這個時間單位是 clock tick,即“時鐘打點”。同時還有一個常數 CLK_TCK,給出了機器時鐘每秒所走的時鐘打點數。於是爲了獲得一個函數 f 的運行時間,我們只要在調用 f 之前先調用 clock(),獲得一個時鐘打點數 C1;在 f 執行完成後再調用 clock(),獲得另一個時鐘打點數 C2;兩次獲得的時鐘打點數之差 (C2-C1) 就是 f 運行所消耗的時鐘打點數,再除以常數 CLK_TCK,就得到了以秒爲單位的運行時間。
這裏不妨簡單假設常數 CLK_TCK 爲 100。現給定被測函數前後兩次獲得的時鐘打點數,請你給出被測函數運行的時間。
輸入格式:
輸入在一行中順序給出 2 個整數 C1 和 C2。注意兩次獲得的時鐘打點數肯定不相同,即 C1 < C2,並且取值在 [0,107]。
輸出格式:
在一行中輸出被測函數運行的時間。運行時間必須按照 hh:mm:ss(即2位的 時:分:秒)格式輸出;不足 1 秒的時間四捨五入到秒。
輸入樣例:
123 4577973
輸出樣例:
12:42:59
思路:
這題目的是模擬clock()函數,給出兩個數c1,c2(機器打點數),然後c2-c1計算出相差的打點數,由於1s內打點100次(CLK_TCK = 100),差值換算成s就是(c2-c1)/CLK_TCK。
# include <cstdio>
int main()
{
int c1,c2;
scanf("%d%d",&c1,&c2);
int ans = c2 - c1; //按題目要求作差
if(ans %100 >=50) //四捨五入操作
{
ans = ans/100+1;
}
else
{
ans = ans/100;
}
printf("%02d:%02d:02d\n",ans /3600,ans % 3600/60,ans%60);
return 0;
}
/*
給出起始時間C1和終止時間C2,單位均爲CLK_TCK(1s = 200CLK_TCK),求出C1 C2相聚時間,其結果按四捨五入精確到S
其中當C2 -C1的末兩位不少於50時,說明C2 -C1需要進位
划拳題目描述:
酒桌上兩人划拳的方法爲:每人口中喊出一個數字,同時用手比劃出一個數字。如果誰比劃出的數字正好等於兩人喊出的數字之和,誰就贏了,輸家罰一杯酒。兩人同贏或兩人同輸則繼續下一輪,直到唯一的贏家出現。
下面給出甲、乙兩人的划拳記錄,請你統計他們最後分別喝了多少杯酒。
輸入格式:
輸入第一行先給出一個正整數 N(≤100),隨後 N 行,每行給出一輪划拳的記錄,格式爲:
甲喊 甲劃 乙喊 乙劃
其中喊
是喊出的數字,劃
是劃出的數字,均爲不超過 100 的正整數(兩隻手一起劃)。
輸出格式:
在一行中先後輸出甲、乙兩人喝酒的杯數,其間以一個空格分隔。
輸入樣例:
5
8 10 9 12
5 10 5 10
3 8 5 12
12 18 1 13
4 16 12 15
輸出樣例:
1 2
思路:
甲贏:a2=a1+b1 且 b2≠a1+b1 乙贏:a2≠a1+b1 且 b2=a1+b1
# include <cstdio>
int main()
{
int n,failA = 0,failB = 0; //甲乙輸的次數
scanf("%d",&n); //記錄條數
for ( int i = 0;i < n;i++)
{
int a1,a2,b1,b2;
scanf("%d%d%d%d",&a1,&a2,&b1,&b2); //甲喊甲劃乙喊乙劃
if(a1 + b1 ==a2 &&a1 + b1!= b2) //甲猜中乙沒有猜中
{
failB++;
}
else if (a1 + b1 ==b2 &&a1 + b1!=a2)
{
failA++;
}
}
printf("%d %d\n",failA,failB); //輸出結果
}
/*
注
設計一個全局變量 failA 和failB來記錄甲乙輸的次數
判斷條件中要注意甲乙兩人都猜中的情況
A+B和C
給定區間 [−231,231] 內的 3 個整數 A、B 和 C,請判斷 A+B 是否大於 C。
輸入格式:
輸入第 1 行給出正整數 T (≤10),是測試用例的個數。隨後給出 T 組測試用例,每組佔一行,順序給出 A、B 和 C。整數間以空格分隔。
輸出格式:
對每組測試用例,在一行中輸出 Case #X: true 如果 A+B>C,否則輸出 Case #X: false,其中 X 是測試用例的編號(從 1 開始)。
輸入樣例:
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
輸出樣例:
Case #1: false
Case #2: true
Case #3: true
Case #4: false
# include <cstdio>
int main()
{
int T,tcase = 1;
scanf("%d",&T); //輸入數據組數
while(T--) //循環T次
{
long long a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
if(a + b > c)
{
printf("Case#%d:true\n",tcase++);
}
else
{
printf("case#%d:false\n",tcase++);
}
}
return 0;
}
/*
注:最大值超過int 型所以變量的數據類型爲longlong型,輸入輸出類型也是%lld
while (T--)循環的是T次 而--T循環的是T-1次