每日一题·AC

2、小丽好朋友的生日快到了,她打算做一些折纸放在幸运罐中作为生日礼物。小丽计划总共 需要a颗星星以及b只纸鹤。现在市场上卖的到的星星纸(折小星星的专用纸)一张可以折c颗小星星,一张纸鹤纸(折纸鹤的专用纸)可以折d只小纸鹤。她准备一共买k张折纸,要优先满足星星纸的需求,剩余的再去买纸鹤纸,请你帮忙计算一下,买来的k张折纸能否满足小丽的折纸需求,能满足的话分别给出需要购买的星星纸和纸鹤纸的数量,不能的话则输出-1。若有满足条件的折纸方案,星星优先折叠,剩下的折纸都属于纸鹤。

输入格式 第一行输入一个整数T,表示共有T组情况需要判断。 接下来T行,每行包含5个整数a,b,c,d,k。 其中1<=T,a,b,c,d,k<=100

输出格式 输出T行,如果可以满足要求,输出两个整数x,y以空格分隔,分别表示需要采购的星星纸数量和纸鹤纸数量。 如果不存在合理方案,输出-1。

输入输出样列 输入样例1:

1
10 6 3 4 6

输出样例1:

4 2

输入样例2:

3
7 5 4 5 8
7 5 4 5 2
20 53 45 26 4

输出样例2:

2 6
-1
1 3

思路

首先,读取输入的组数T,并进行循环处理每一组情况。在每组情况中,读取需要的星星数量a、纸鹤数量b、星星纸折叠数量c、纸鹤纸折叠数量d以及可购买的折纸数量k。
​
接下来,使用函数panduan判断需要购买的星星纸数量,根据星星纸折叠数量c和需要的星星数量a计算出所需的星星纸张数t。如果需要购买的折纸数量k大于t,则进一步判断剩余的折纸能否满足纸鹤的需求。
​
如果剩余的折纸数量大于等于b所需的纸张数量,说明可以满足需求,输出所需的星星纸数量t和剩余的折纸数量k-t即可。否则,输出-1表示无法满足需求。
​
最后,循环结束后返回0,表示程序正常结束。

AC:

#include<stdio.h>
​
int panduan(int a,int b)//a/c可能是小数,而纸数为整数
{
    int t;
    if(a%b!=0)
    {
        t=a/b+1;
    }
    else
    {
        t=a/b;
    }
    return t;
}
​
int main()
{
    int n;
    int a,b,c,d,k;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
        int t=panduan(a,c);
        if(k>t)
        {
            if((k-t)*d>=b)
            {
                printf("%d %d\n",t,(k-t));
            }
            else
            {
                printf("-1\n");
            }
        }
        else
        {
            printf("-1\n");
        }
    }
    
    return 0;
    
}

简化代码:

#include <stdio.h>
​
int main()
{
    int T;
    scanf("%d", &T);
    while (T--)
    {
        int a, b, c, d, k;
        scanf("%d %d %d %d %d", &a, &b, &c, &d, &k);
        int x = (a + c - 1) / c; // 计算需要引入的星星纸数量
        if (x > k)
        {
            printf("-1\n");
        }
        else
        {
            int y = (b + d - 1) / d * (k - x); // 计算需要的纸鹤纸数量
            printf("%d %d\n", x, y);
        }
    }
    return 0;
}
​

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AAA阿魏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值