过去的夏 2022-02-14 14:13 采纳率: 100%
浏览 95
已结题

最后两个测试点无论如何通不过

在m到n内找出所有的亲密数对。

若a、b为1对亲密数,则a的因子和等于b、b的因子和等于a、且a不等于b。如:220、284是1对亲密数,则284、220也是1对亲密数。(一个数的因子不包含自己,但包含1)

输入格式:
两个数m和n。

输出格式:
每行两个数a,b,表示a和b是亲密数,且a<b;每行的第一个数按从小到大输出。两个数间用一个空格隔开。

输入样例:
18 299
输出样例:
在这里给出相应的输出。例如:

220 284
代码

#include <stdio.h>
#include <stdlib.h>
int main()
{ int a,b,m,n,k,q;
 int g[100000];
  q=0;
  k=0;
  scanf("%d %d",&a,&b);
  for(m=a;m<=b;m++)
  {
      for(n=1;n<m;n++)
      {
          if(m%n==0)
          {
              k=k+n;
          }
      }
      g[q]=k;
      k=0;
      q++;
  }
  for(m=0;m<q;m++)
  {
      for(n=a;n<=b;n++)
      {
          if(g[m]==n&&g[n-a]==m+a&&(m+a)!=n&&(m+a)<n)
          {
              printf("%d %d\n",m+a,n);
          }
      }
  }


    return 0;
}



img

  • 写回答

5条回答 默认 最新

  • 关注

    你题目的解答代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int a, b, m, n, k, q, t;
        q = 0;
        scanf("%d %d", &a, &b);
        int *g = (int *)malloc(sizeof(int)*(b+1));
        for (m = a; m <= b; m++)
        {
            k = 0;
            t = m / 2;
            for (n = 1; n <= t; n++)
            {
                if (m % n == 0)
                {
                    k = k + n;
                }
            }
            g[m] = k;
        }
        for (m = a; m <= b; m++)
        {
            n = g[m];
            if (n>=a && n<m && g[n]==m)
                printf("%d %d\n", n, m);
        }
        return 0;
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

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