弦月的博客
锦瑟无端五十弦,一弦一柱思华年。

转载请注明出处: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 的多米诺骨牌。要求将多米诺骨牌放入这个矩形区域,同时满足以下条件:

  1. 每一个多米诺骨牌刚好占满矩形区域内的两个格子;
  2. 任意两个多米诺骨牌不会重叠;
  3. 任意一个多米诺骨牌必须在矩形区域内,允许多米诺的边界触碰到矩形区域的边界。

求:按照上述规则,你能够放到矩形区域内的最多的多米诺骨牌的数量。

输入

一行包括两个正整数 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/(m
n)⌋

代码

#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;
}
posted on 2017-07-06 20:42  弦月C  阅读(2524)  评论(2编辑  收藏  举报