T、DZ 2023-02-14 22:11 采纳率: 45.5%
浏览 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日

悬赏问题

  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗