下面这道C语言题代码怎么写?

ZZULIOJ2848提示:代码长度不会超过500B... ZZULIOJ2848
提示:代码长度不会超过500B
展开
 我来答
xgn911
2022-11-30 · TA获得超过1363个赞
知道小有建树答主
回答量:1493
采纳率:96%
帮助的人:644万
展开全部

当s<k时,所有盒子衣服加起来都不够k,即输出NO;

当s=k时,所有盒子衣服加起来恰好为k,即输出YES;

当s>k时,考虑如下分配方案,使任意连续盒子内的衣服总数都不为k:

每k个盒子一组,前k-1个盒子只分配1件衣服,第k个盒子分配k+1件衣服

这样任意连续盒子的衣服总数要么至多为k-1,要么至少为k+1

且该方案所需的衣服总数最少

由于每组盒子衣服总数为k-1+k+1=2k,n个盒子可分为n/k组,余下n%k个盒子也都为1件

那么该方案所需衣服总数为sum=(n/k)*2*k+n%k

若s<sum,说明某组中的第k个盒子无法分配到k+1件衣服

那么该盒子与其旁边的若干盒子一定可以组成和为k的连续盒子,即输出YES;

若s=sum,说明上述分配方案恰好存在,即输出NO;

若s>sum,多出来的衣服都可以分配给某组中的第k个盒子,使其衣服数大于k+1,

但仍然满足任意连续盒子的衣服总数不为k,即输出NO

综上,C代码和运行结果如下:

输出符合样例,望采纳~

附源码:

#include <stdio.h>

typedef long long ll;

int main() {

    int T, res;

    ll s, n, k, sum;

    scanf("%d", &T);

    while (T--) {

        scanf("%lld%lld%lld", &s, &n, &k);

        res = 0;

        if (s > k) {

            sum = (n / k) * 2 * k + n % k;

            if (s < sum)

                res = 1;

        }

        else if (s == k)

            res = 1;

        if (res) 

            printf("YES\n");

        else 

            printf("NO\n");

    }

    return 0;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式