转载请注明出处: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;
}