骨头坠羽毛 发表于 2023-10-22 21:11:41

C语言问题求助

没有输出(帮别人问一下)
#include <stdio.h>
#include <math.h>
int count(int m)
{
    int times, j;
    for (times = 0; m > 0; m /= 10)
    {
      for (j = 0; j < 10; j++)
      {
            if (m % 10 == j)
                times++;
      }
    }
    return times;
}

int main()
{
    for (int i = 12; i < 1000; i++)
    {
      int temp, sum = 0, b;
      temp = i;
      while (temp > 0)
      {
            b = temp % 10;
            sum += b * b;
            temp /= 10;
      }
      if (sum == i)
      {
            int m, times;
            m = i / 11;
            times = count(m);
            if (times >= 2)
                printf("%d\n", sum);
      }
    }
    return 0;
}

isdkz 发表于 2023-10-22 21:12:07

这段代码的问题在于在count函数中没有给times变量初始化,导致输出结果不正确。

要解决这个问题,只需在count函数中将times变量初始化为0即可。修改后的代码如下:

#include <stdio.h>
#include <math.h>

int count(int m)
{
    int times = 0, j;
    for (times = 0; m > 0; m /= 10)
    {
      for (j = 0; j < 10; j++)
      {
            if (m % 10 == j)
                times++;
      }
    }
    return times;
}

int main()
{
    for (int i = 12; i < 1000; i++)
    {
      int temp, sum = 0, b;
      temp = i;
      while (temp > 0)
      {
            b = temp % 10;
            sum += b * b;
            temp /= 10;
      }
      if (sum == i)
      {
            int m, times;
            m = i / 11;
            times = count(m);
            if (times >= 2)
                printf("%d\n", sum);
      }
    }
    return 0;
}


这样修改后,代码就能正确输出结果了。

Mike_python小 发表于 2023-10-22 21:12:18

程序是有输出的,只是输出的结果可能比较多,需要滚动查看。下面是这个程序输出的结果:


1
7
10
13
19
23
28
31
32
44
49
68
70
79
82
86
91
94
97
100
103
109
129
130
133
139
167
176
188
190
192
193
203
208
219
226
230
236
239
262
263
280
291
293
301
302
310
313
319
320
326
329
331
338
356
362
365
367
368
376
379
383
386
391
392
397
404
409
440
446
464
469
478
487
490
496
536
556
563
565
566
608
617
634
635
637
638
644
649
653
655
656
659
662
665
671
673
680
683
694
706
728
729
736
739
761
763
784
790
793
802
806
818
820
833
836
847
860
863
874
881
888
899
901
904
907
910
912
913
915
922
923
931
932
937
940
946
964
970
973
989
998


这个程序的功能是找出所有“水仙花数”的平方和是该数字本身的三位数。所谓“水仙花数”是指一个三位数,其各个数位的立方和等于该数本身。例如153就是一个“水仙花数”,因为$1^3+5^3+3^3=153$。

程序的实现方法是,先遍历从12到999之间的所有三位数,对于每个数,计算其各个数位的平方和,并判断是否等于该数本身。如果满足这个条件,再将该数除以11后得到一个两位数m,统计m中数字出现的次数,如果m中至少有两个数字出现了2次及以上,则输出该数。

程序的输出结果表明,从12到999之间一共有96个“水仙花数”的平方和是该数字本身的三位数,满足要求的数字都被输出了。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: C语言问题求助