2019年暑假集训第六套题

问题 A: 切西瓜

题目描述

群众想要吃瓜,于是给你一个瓜让你切,但是作为考验
告诉你西瓜的重量,问你能否将这个西瓜分成两部分,每个部分都是偶数。

输入

输入一行,包含一个整数weight,表示西瓜的重量1 <= weight <= 100

输出

输出一行,见样例。

样例输入

【输入样例1】
8
【输入样例2】
3

样例输出

【输出样例1】
YES, you can divide the watermelon into two even parts.
【输出样例2】
NO, you can't divide the watermelon into two even parts.

提示

要注意检查你的输出格式要跟样例输出一模一样才能通过,尤其别忘了句子最后的小点哦

题解:这题看似简单,其实有陷阱,因为2这个数虽然是偶数,但只能分成1和1(0和2等于没分)

所以2要特判一下

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int w;
    cin>>w;
    if(w==2)
    {
        cout<<"NO,"<<" you can't divide the watermelon into two even parts."<<endl;
        return 0;
    } 
    if(w%2==0)
       cout<<"YES,"<<" you can divide the watermelon into two even parts."<<endl;
    else if(w%2!=0)
       cout<<"NO,"<<" you can't divide the watermelon into two even parts."<<endl;
} 

问题 B: 魔法药水

题目描述

小H陷入了一个迷宫中,迷宫里有一个可怕的怪兽,血量有N点,小H有三瓶魔法药水,分别可以使怪兽损失a%、b%、c%的血量(之后怪兽的血量会向下取整),小H想合理地运用这三瓶药水,使怪兽失去尽可能多的血量
    注意:每瓶药水只能用一次

输入

一行,四个整数 N,a,b,c

输出

一行,一个整数w,表示最多能使得怪兽扣减多少血量

样例输入

100 20 15 0

样例输出

32

提示

5≤N≤109,0≤a,b,c≤100

题解:

这题其实是道贪心,只要多试几个样例就会发现:

扣的血多的应该多放在前面攻击。

所以排序解决即可。

代码:

#include<bits/stdc++.h>
using namespace std;
int a[4];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=3;i++)cin>>a[i];
    sort(a+1,a+4);//排序(懒得用降序)
    int ans=n;
    for(int i=3;i>=1;i--)ans*=1-(a[i]/100.0);
    cout<<n-ans<<endl;//所有血量-剩于血量=被扣血量
} 

问题 D: 数的划分

题目描述

将整数 nn 分成 kk 份,且每份不能为空,问有多少种不同的分法。当 n=7, k=3n=7,k=3 时,下面三种分法被认为是相同的:1,1,51,1,5; 1,5,11,5,1; 5,1,15,1,1

输入

一行两个数 n , k。

输出

一行一个整数,即不同的分法数。

样例输入

7 3

样例输出

4

提示

样例解释

四种分法为:1,1,51,1,5;1,2,41,2,4;1,3,31,3,3;2,2,32,2,3。  

数据范围与提示

6<=n<=200,2<=k<=6

题解:回溯板子题。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,k,s[205],rest;
int ans=0;
void search(int dep)
{
    if(dep==k+1)
    {
        if(rest==0)
        {
            ans++;
        }   
        return;
    }
    for(int i=s[dep-1];i<=rest;i++)
    {
            s[dep]=i;
            rest-=i;
            search(dep+1);
            rest+=i;
    }
}
int main(){
    cin>>n>>k;
    s[0]=1;
    rest=n;
    search(1);
    cout<<ans<<endl;
}
发布了43 篇原创文章 · 获赞 12 · 访问量 3650

猜你喜欢

转载自blog.csdn.net/xzerui/article/details/97176716
今日推荐