在这之前需要一共筹集 n 元钱。在每个星期一筹集 x 元,星期二筹集 x+k 元,……,星期日筹集x+6k 元,并连续筹集 52 个星期。

博客围绕计算正整数x和k的值展开,要求满足1≤x≤100,使得刚好筹集n元,且有多个答案时x尽可能大、k尽可能小。给出了C语言代码实现,通过外层枚举k、内层枚举x的方式,若满足条件则输出x和k,还分析了循环顺序对时间限制的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其中 x,k 为正整数,并且满足 1≤x≤100

现在请你帮忙计算 x,k 为多少时,能刚好筹集�n 元。

如果有多个答案,输出 x 尽可能大,k 尽可能小的。注意 k 必须大于 0。

#include <stdio.h>

int main(void)
{
    int money;  //需要的钱vv

    scanf("%d", &money);

    for(int k  = 1; ; k++)
    {
        for(int x = 100; x >= 1; x--)
        {
            if(52 * (7 * x + 21 * k) == money)
            {
                printf("%d
%d
", x, k);
                return 0;
            }
        }
    }
}

  1. 外层循环枚举k(k ∈ N+),因为k要尽可能小,所以k从1开始;

  2. 内层循环枚举x(x ∈ [1,100],且x ∈ N+),因为x要尽可能的大,所以x从100开始;

  3. 若筹得钱正好等于需要的钱(52 * (7 * x + 21 * k) == money),分两行输出x,k,返回值为0,程序结束。

     4.如果x在外层的k在内层的话,x每增加1,没有遇到if的话,k会一直增大,超过时间限制,总循          环次数为xk,其中k无限增大  但是如果k在外层的话,内部x 的循环次数是可控的,不会超过时间限制

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值