T、DZ 2023-02-14 22:11 采纳率: 83.3%
浏览 41
已结题

C语言:求最小的x中遇到的难题

img

img

img

为什么我的结果都是no,代码也好像没有判断过s是否等于i,直接循环81次。
看了很久怎么也找不到原因,求解答!


#include <stdio.h>
int s_(int a,int b,int c,int d,int *x)
{
    int i,n,s=0;
    for(i=0; i<=81; i++)
    {
        *x=(i+a)*(i+b)*(i+c)*(i+d);
        n=x;
        while(n)
        {
            s+=n%10;
            n/=10;
        }
        if(s==i)
            return 1;
    }
    return 0;
}
int main()
{
    long long int x,n,i,s;
    int a,b,c,d,k;
    while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
    {
        if(s_(a,b,c,d,&x))
            printf("%lld\n",x);
        else
            printf("no\n");
    }
    return 0;
}

  • 写回答

3条回答 默认 最新

  • 普罗米修斯 2023-02-14 23:10
    关注

    根据你的代码,我发现可能是以下两个问题导致结果一直为"no":

    在函数s_中,当计算出的 n 赋值给 *x 后,你没有将s清零,导致s的值一直叠加,可能导致后面的判断出错。你可以在每次计算新的 n 时将 s 初始化为0。

    在函数s_中,n=x的操作赋值的是指针x的值而不是变量x的值,导致后面的 s+=n%10 和 n/=10 操作出现问题。你需要将 n 改为 *x,以便对 x 指针所指向的变量进行操作。

    针对以上两个问题,你可以尝试修改函数s_的代码如下:

    int s_(int a,int b,int c,int d,int *x)
    {
        int i, n, s;
        for(i = 0; i <= 81; i++)
        {
            *x = (i+a)*(i+b)*(i+c)*(i+d);
            n = *x;
            s = 0; // 在每次计算新的n时将s初始化为0
            while(n)
            {
                s += n % 10;
                n /= 10;
            }
            if(s == i)
                return 1;
        }
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月22日
  • 已采纳回答 2月14日
  • 创建了问题 2月14日

悬赏问题

  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含