一世轻尘 发表于 2020-12-24 20:55:43

没有输出(问题在哪是重点)

本帖最后由 一世轻尘 于 2020-12-24 21:50 编辑

问题在哪?
求更简便的方法。{:10_256:}
#include<stdio.h>
int f(int x);
void judge();
int main()
{
      void judge();
      return 0;
}
int f(int x)
{
      int k,sum=0;
      for(k=0;k<x;k++)
      {
                if(x%k==0)
                {
                        sum=sum+k;
                }
      }
      return sum;
}
void judge()
{
      int i,j;
      for(i=1;i<501;i++)
      {
                for(j=1;j<501;j++)
                {
                        if(f(i)==j&&f(j)==i)
                        {
                              printf("%d %d\n",i,j);
                        }
                }
      }
}

jackz007 发表于 2020-12-24 21:12:41

本帖最后由 jackz007 于 2020-12-24 21:14 编辑

#include <stdio.h>

int sum(int n)
{
      int k , s                                              ;
      for(s = 1 , k = 2 ; k < n ; k ++) if(! (n % k)) s += k ;
      return s                                             ;
}

main(void)
{
      int a , c , k , m                                    ;
      for(c = 0 , k = 0 ; k < 501 ; k ++) {
                if(k > 1) {
                        a = sum(k)                           ;
                        if(sum(a) == k) {
                              c ++                           ;
                              printf("%3d\t%3d\n" , k , a)   ;
                              if(a > k) k = a                ;
                        }
                }
      }
      if(! c) printf("指定范围没有友好数。\n")               ;
}
      编译、运行实况
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
6       6
28      28
220   284
496   496

D:\00.Excise\C>

风过无痕1989 发表于 2020-12-24 21:57:08

没有输出的问题,可能是第12行错误,k 不能从 0 开始呀,因为下面的判断是 x % k ,它相当于 x / k

一世轻尘 发表于 2020-12-24 22:05:24

风过无痕1989 发表于 2020-12-24 21:57
没有输出的问题,可能是第12行错误,k 不能从 0 开始呀,因为下面的判断是 x % k ,它相当于 x / k

还是不行

风过无痕1989 发表于 2020-12-24 22:17:18

我还是将我的发出来吧
#include<stdio.h>
int main()
{
        int a, i, b, n;
        for (a = 1; a < 501; a++)                // 穷举500以内的全部整数
        {
                for (b = 0, i = 1; i <= a / 2; i++)// 计算数a的各因子,各因子之和存放于b
                        if (!(a%i))
                                b += i;
                for (n = 0, i = 1; i <= b / 2; i++)// 计算b的各因子,各因子之和存于n
                        if (!(b%i))
                                n += i;
                if (n == a && a<b)                  // 使每对亲密数只输出一次
                        printf("%4d<-->%4d    \n", a, b);   // 若n=a,则a和b是一对亲密数,输出
        }

        return 0;
}

一世轻尘 发表于 2020-12-24 22:21:53

风过无痕1989 发表于 2020-12-24 22:17
我还是将我的发出来吧

他这个和一般的整除问题不一样,不知只有小于a/2的因子才算,大于的也要加上

风过无痕1989 发表于 2020-12-24 22:26:53

一世轻尘 发表于 2020-12-24 22:21
他这个和一般的整除问题不一样,不知只有小于a/2的因子才算,大于的也要加上

这个亲密数对比较稀少,5000以内也就只有三对:
220 <--> 284
1184 <--> 1210
2620 <--> 2924

一世轻尘 发表于 2020-12-24 22:56:11

风过无痕1989 发表于 2020-12-24 22:26
这个亲密数对比较稀少,5000以内也就只有三对:
220284
11841210


啊擦,找到问题了,main里的不用加void,那个不用加i!=j的,我看错题了

风过无痕1989 发表于 2020-12-24 23:03:08

一世轻尘 发表于 2020-12-24 22:56
啊擦,找到问题了,main里的不用加void,那个不用加i!=j的,我看错题了

呵呵~~为了达到你的更简便,我花了半个小时,将能省的变量都省了,直接用 b 来记录因子和
页: [1]
查看完整版本: 没有输出(问题在哪是重点)