轉載請注明出處:http://www.cnblogs.com/xianyue
題1:矩形大劇院
題目描述
某座城市決定在一塊形狀為 長為 n、寬為 m 的矩形地面上鋪上邊長為 a 的正方形地板,並且在這塊地基的基礎上建造一個大劇院。要求不能弄破地板,並且地板的邊要和矩形邊平行(地板可以超出矩形地面區域,但是一定要保證矩形地面被地板占滿)。問:告訴你n,m和a,至少需要幾塊地板才能把矩形地面鋪滿?
輸入
一行包括三個正整數n,m,a(1<=n,m,a<=10^9)
輸出
輸出需要的最少地板數。
樣例輸入
6 6 4
樣例輸出
4
題解
可以發現答案是⌈n/a⌉*⌈m/a⌉。
代碼
#include <iostream>
using namespace std;
long long n, m, a;
int main()
{
cin >> n >> m >> a;
cout << ((n+a-1)/a) * ((m+a-1)/a) << endl;
return 0;
}
題2:分西瓜
題目描述
一個炎熱的夏天小明和丁丁打完籃球,再回來的路上買了一個西瓜。
然后它們回答了家里,發現桌子上放着一個電子秤,然后它們就用電子秤稱了一下西瓜的重量,發現習慣正好是w斤(w恰巧是一個整數),小明和頂頂就准備分西瓜,但是小明逍遙自己分得的西瓜的重量正好是偶數斤,頂頂也希望自己分得的西瓜的斤數也是偶數斤,請問有沒有這種可能將w斤的西瓜分成兩個偶數斤重的半個西瓜。如果有可能則輸出“Yes”,否則輸出“No”。
輸入
西瓜的重量w(斤)。
輸出
如果有可能將w斤的西瓜分成兩個偶數斤重的半個西瓜,則輸出“Yes”,否則輸出“No”。
樣例輸入
8
樣例輸出
8
題解
這道題其實是問你給你一個數w,如果w能夠表示成兩個正偶數的和,則輸出“Yes”,否則輸出“No”。可以發現任何大於2的偶數都滿足這個條件。
代碼
#include <iostream>
using namespace std;
int w;
int main()
{
cin >> w;
if (w > 2 && w % 2 == 0)
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
題3:多米諾骨牌
題目描述
給你一個長為 M 寬為 N 的矩形區域,並且給你用不完數量的長為 2 寬為 1 的多米諾骨牌。要求將多米諾骨牌放入這個矩形區域,同時滿足以下條件:
- 每一個多米諾骨牌剛好占滿矩形區域內的兩個格子;
- 任意兩個多米諾骨牌不會重疊;
- 任意一個多米諾骨牌必須在矩形區域內,允許多米諾的邊界觸碰到矩形區域的邊界。
求:按照上述規則,你能夠放到矩形區域內的最多的多米諾骨牌的數量。
輸入
一行包括兩個正整數 M 和 N,分別表示矩形區域的長和寬。
輸出
輸出按照上述規則,你能夠放到矩形區域內的最多的多米諾骨牌的數量。
樣例輸入1
2 4
樣例輸出1
4
樣例輸入2
3 3
樣例輸出2
4
題解
很容易看出這道題的答案是⌊M*N/2⌋。
代碼
#include <iostream>
using namespace std;
int m, n;
int main()
{
cin >> m >> n;
cout << m * n / 2 <<endl;
return 0;
}
題4:士兵與香蕉
題目描述
一個士兵想要在一家超市里面買w根香蕉,已知他買第1根香蕉需要花費k元錢,買第2根香蕉需要話費2k元錢,……,買第i根香蕉需要花費ik元錢,……
該士兵現在有n元錢,如果他的錢不夠,他就需要問他的士兵朋友們借錢去買香蕉。問士兵需要問他的室友借多少錢?
輸入
輸入包括一行三個證書k,n,w(1<=k,w<=1000,0<=n<=10^9),分別表示第一根香蕉的花費、士兵一開始擁有的錢的元數、士兵需要購買的相交的數量。
輸出
士兵需要向他的士兵朋友借的錢數。如果士兵不需要借錢,則答案為0。
樣例輸入
3 17 4
樣例輸出
13
題解
這道題主要就是求購買w根香蕉的花費。用到了高斯求和。
k+2*k+...+w*k=(1+2+...+w)*k=(1+w)*w/2*k
代碼
#include <iostream>
using namespace std;
int k, n, w, res;
int main()
{
cin >> k >> n >> w;
res = w * (w + 1) /2 * k - n;
if (res < 0)
res = 0;
cout << res << endl;
return 0;
}
題5 數綿羊
題目描述
一個夜黑風高的晚上小愛麗絲睡不着覺,於是他決定數綿羊,但是光數綿羊的話總感覺很無聊,所以他決定:
- 每數m只綿羊就讓這第k只綿羊被平底鍋擊中
- 每數n只綿羊就讓這第l只綿羊的尾巴被門夾住
就這樣小愛麗絲數了d只綿羊然后睡着了,請問在這d只綿羊中有多少只綿羊受到了傷害?
輸入
輸入包括三行。
第一行一個整數m。
第二行一個整數n。
第三行一個整數d。
輸出
輸出一個受傷的綿陽的數量。
樣例輸入
2
3
7
樣例輸出
4
題解
可以發現:
被平底鍋擊中的綿羊的數量為 ⌊d/m⌋
尾巴被門夾住的綿羊的數量為 ⌊d/n⌋
但是上述兩者的和中重復計算了一個數值,即是同時被平底鍋擊中以及尾巴被門夾住的綿羊的數量為⌊d/(mn)⌋
所以可以求得最終的答案為:
⌊d/m⌋+⌊d/n⌋-⌊d/(mn)⌋
代碼
#include <iostream>
using namespace std;
int m, n, d;
int main()
{
cin >> m >> n >> d;
cout << d/m + d/n - d/(m*n) << endl;
return 0;
}