| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 487 人关注过本帖
标题:C语言问题 求解
只看楼主 加入收藏
wsliuyunming
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:54
专家分:143
注 册:2010-9-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
C语言问题 求解
//大意/有两个数,每个数的所有公约数(除了本身以外)的和正好等于对方,则称这两个数互为互满数,求30000以内的所有互满数。。

#include "stdio.h"
int f1(int n)
{
    int p=n-1,a=0; //从本身后一数算起
    for(p;p>1;p--)//依次检测
   {
        if(n%p==0)
         a+=p;
   }
      return a;//返回所有公约数之和
}

void main()
{ int i,j,t=0,y=0,a[200],b[200];//定义a[200],b[200]存储互满数
      for(i=30000;i>0;i--)
     for(j=30000;j>0;j--) //双重循环
   {  if((f1(i)==j)&&(f1(j)==i)&&(i!=j))//求互满数
     { a[t]=i;
       b[y]=j;                      //存储在数组里面
       printf("互满数:%d %d",a[t],a[y]);
       t++;
       y++;
     }
   
   }   
   
}
搜索更多相关主题的帖子: C语言 求解 
2010-10-12 16:04
帝国
Rank: 3Rank: 3
来 自:云南昆明
等 级:论坛游侠
帖 子:68
专家分:144
注 册:2010-10-11
收藏
得分:0 
?问题在哪里
2010-10-12 16:08
wsliuyunming
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:54
专家分:143
注 册:2010-9-26
收藏
得分:0 
回复 2楼 帝国
可以运行 但是不出结果
2010-10-12 16:28
Debug_L
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2010-10-12
收藏
得分:10 
#include <stdio.h>
void main()
{
    int m,t,i=0,a[5][2],j;
    int sum1=0,sum2=0;
    scanf("%d",&t);
    m=t;
    while(t--)
    {
       scanf("%d %d",&a[i][0],&a[i][1]);
       i++;
    }
    for(i=0;i<m;i++)
    {
        for(j=1;j<a[i][0];j++)
            if(a[i][0]%j==0)
                sum1+=j;
        for(j=1;j<a[i][1];j++)
            if(a[i][1]%j==0)
                sum2+=j;
        if((sum1==a[i][1])&&(sum2==a[i][0]))
            printf("YES\n");
        else
            printf("NO\n");
    }
   



}
2010-10-12 21:15
Debug_L
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2010-10-12
收藏
得分:0 
这个是测试代码!其他的你自己改吧!这个就是输入两个数 用来判断是不是互满数!
2010-10-12 21:17
liqingyang
Rank: 2
等 级:论坛游民
帖 子:47
专家分:39
注 册:2010-2-24
收藏
得分:10 
楼主,这代码我测试了,可以运行并正确显示结果。


#include    "stdio.h"
int        HMS(int    n)
{
    int        i,sum=0;
    for(i=1;i<n;i++)   
        if(n%i==0)
            sum+=i;
    return     sum;
}
main()
{
    int        i,j,x=0,y=0;
    for(i=1;i<3000;i++)
        for(j=i;j<3000;j++)
        {
            x=HMS(i),y=HMS(j);
            if((x==j && y==i) && i!=j)
                printf("%d\t%d\n",i,j);
        }
    puts("运行结束");
    return    0;
}

我只测试到3000,等了大概5分钟,我想如果三万的话,估计要3个小时
2010-10-12 22:46
wsliuyunming
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:54
专家分:143
注 册:2010-9-26
收藏
得分:0 
回复 6楼 liqingyang
我那个怎么就出不来 你的从1到3000而我的不就是反过来从30000到1吗 不都一样吗
2010-10-12 23:21
快速回复:C语言问题 求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016342 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved