C语言大神快来1000以内的完数,简单题水得不是那么厉害,但是小白我还是不会改代码

跃2.0 2016-12-27 07:50:00

问题: 1000以内的完数
题目描述

一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。

本题要求使用函数实现,函数原型

void startJudge(int value) {

if( Judge(value) ) {

printf("%d ",value);

}

}
输入

一个sum (sum < 1000) ,表示测试数据的组数,接着sum行,每一行表示一个测试数据n,表示要求1到n以内的完数,1在这里不算是完数。

输出

范围内的完数,如果范围内没有完数请输出none,每组测试数据空出一行(如果完数有多个,每个数字后面都输出空格)。
样例输入

2
1
6

样例输出

none
6

请忽略掉它说的函数,我没有用函数不会,我写的代码就只能符合样例输出还是不考虑格式,,假如输入100,1000就没有输出
my wrong :
#include<stdio.h>
int main()
{
int n,i,sum,j,k,m;
scanf("%d",&j);
sum=0;
for(k=0; k<j; k++)
{
scanf("%d",&n);
for(m=1; m<n; m++)
{
for(i=1; i<m; i++)
{
if(m%i==0)
sum=i+sum;
}
}
if(sum==m)
{
printf("%d ",sum);
}


if(sum==0)
{
printf("none\n");
}
}
}




...全文
547 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
跃2.0 2017-01-10
  • 打赏
  • 举报
回复
我自己结贴算了,始终相信,各有缘法,能投机取巧也是不错,只要你会,正规代码反而没有什么意思因为纠结太久,但是放假整理时会附上,我就说下投机取巧的吧,自己百度题目范围内所有完数,然后根据每个完数范围直接输出,,,
跃2.0 2017-01-10
  • 打赏
  • 举报
回复
引用 12 楼 pkuzhx 的回复:
[quote=引用 9 楼 zuoside__lord 的回复:] [quote=引用 8 楼 pkuzhx 的回复:] sum没有清零吧,其他没留意。 debug程序是基本技能。
不懂就问也是学习的过程,闭门造车也许一辈子都造不出来,[/quote] 也要自己先想办法解决吧?你一有一点小问题,自己都懒得去debug,就指着别人帮你,这叫要奶瓶。[/quote]0
pkuzhx 2017-01-10
  • 打赏
  • 举报
回复
引用 9 楼 zuoside__lord 的回复:
[quote=引用 8 楼 pkuzhx 的回复:] sum没有清零吧,其他没留意。 debug程序是基本技能。
不懂就问也是学习的过程,闭门造车也许一辈子都造不出来,[/quote] 也要自己先想办法解决吧?你一有一点小问题,自己都懒得去debug,就指着别人帮你,这叫要奶瓶。
cutmelon 2017-01-05
  • 打赏
  • 举报
回复
穷举的话这题不难吧。。。1000之内也就3个数而已
#include <stdio.h>
#include <math.h>

bool Judge(int value)
{
	int sum=1;
	int l=(int)sqrt(value);
	for (int i=2;i<=l;i++)
	{
		if (value%i==0)
		{
			sum+=i;
			sum+=value/i;
		}
	}

	return value==sum;
}

void startJudge(int n)
{
	bool found=false;
	for (int i=2;i<=n;i++)
		if (Judge(i))
		{
			printf("%d ",i);
			found=true;
		}

	if (found)
		printf("\n");
	else
		printf("none\n");
}

int main()
{
	int sum;
	scanf("%d",&sum);
	if (sum<=0)
	{
		printf("Are you kidding me?\n");
		return -1;
	}
	int *n=new int[sum];
	for (int i=0;i<sum;i++)
	{
		scanf("%d",n+i);
		if (n[i]<=0)
		{
			printf("Are you kidding me?\n");
			delete[] n;
			return -1;
		}
	}

	for (int i=0;i<sum;i++)
		startJudge(n[i]);

	delete[] n;

	return 0;
}
跃2.0 2017-01-05
  • 打赏
  • 举报
回复
引用 10 楼 cutmelon的回复:
穷举的话这题不难吧。。。1000之内也就3个数而已
#include <stdio.h>
#include <math.h>

bool Judge(int value)
{
	int sum=1;
	int l=(int)sqrt(value);
	for (int i=2;i<=l;i++)
	{
		if (value%i==0)
		{
			sum+=i;
			sum+=value/i;
		}
	}

	return value==sum;
}

void startJudge(int n)
{
	bool found=false;
	for (int i=2;i<=n;i++)
		if (Judge(i))
		{
			printf("%d ",i);
			found=true;
		}

	if (found)
		printf("\n");
	else
		printf("none\n");
}

int main()
{
	int sum;
	scanf("%d",&sum);
	if (sum<=0)
	{
		printf("Are you kidding me?\n");
		return -1;
	}
	int *n=new int[sum];
	for (int i=0;i<sum;i++)
	{
		scanf("%d",n+i);
		if (n[i]<=0)
		{
			printf("Are you kidding me?\n");
			delete[] n;
			return -1;
		}
	}

	for (int i=0;i<sum;i++)
		startJudge(n[i]);

	delete[] n;

	return 0;
}
我试试去,AC才是王道
跃2.0 2017-01-04
  • 打赏
  • 举报
回复
引用 8 楼 pkuzhx 的回复:
sum没有清零吧,其他没留意。 debug程序是基本技能。
不懂就问也是学习的过程,闭门造车也许一辈子都造不出来,
pkuzhx 2017-01-03
  • 打赏
  • 举报
回复
sum没有清零吧,其他没留意。 debug程序是基本技能。
跃2.0 2016-12-30
  • 打赏
  • 举报
回复
引用 6 楼 hornsey2012的回复:
你的程序改了下 你把循序多写了一遍
#include<stdio.h>
int main()
{
    int n,i,sum,j,k,m;
    scanf("%d",&j);
    for(k=2; k<=j; k++)
    {
	    sum=1;
        for(m=2; m<k; m++)
        {
	         if(k%m==0)
                 sum = m+sum;
        }
        if(sum==m)
        {
            printf("%d ",sum);
        }
		else
        {
            printf("none\n");
        }
    }
}
我们要多组输入,,,你修改后的代码满足不了,而且它会输入好多none,我们只能输出一次
hornsey2012 2016-12-30
  • 打赏
  • 举报
回复
你的程序改了下 你把循序多写了一遍
#include<stdio.h>
int main()
{
    int n,i,sum,j,k,m;
    scanf("%d",&j);
    for(k=2; k<=j; k++)
    {
	    sum=1;
        for(m=2; m<k; m++)
        {
	         if(k%m==0)
                 sum = m+sum;
        }
        if(sum==m)
        {
            printf("%d ",sum);
        }
		else
        {
            printf("none\n");
        }
    }
}
hornsey2012 2016-12-30
  • 打赏
  • 举报
回复
看看我这个

#include <stdio.h>

/*
 * Judge whether the value is a wanshu, yes return 1, no return 0
 */
int Judge(int value)
{
        int i;
        int len = value/2;
        int sum = 0;

        if( value <= 1)
                return 0;
        else
                sum = 1;

        for(i=2; i <= len; i++)
        {
                if(value%i == 0)
                        sum += i;
        }

        if(sum == value)
                return 1;
        else
                return 0;
}

int main(int argc,char *argv[])
{
        int i,n;

        printf("Please input a num in 1-1000:");

        scanf("%d",&n);

        for(i = 1; i<=n; i++)
        {
                if(Judge(i) == 1)
                        printf("%d\n",i);
                else
                        printf("none\n");
        }

        return 0;
}
跃2.0 2016-12-29
  • 打赏
  • 举报
回复
引用 2 楼 nalw2012 的回复:
楼主你把自己的话重新捋一遍吧!越看越迷糊!
就是说我代码有错的,请帮忙修改,但是我又不知道哪里错了
跃2.0 2016-12-29
  • 打赏
  • 举报
回复
引用 1 楼 s598653453 的回复:
根本就不懂楼主你在说啥。。。。
引用 1 楼 s598653453 的回复:
根本就不懂楼主你在说啥。。。。
,最简单的理解 就是我代码有错的就,请帮忙修改
hornsey2012 2016-12-29
  • 打赏
  • 举报
回复
楼主你把自己的话重新捋一遍吧!越看越迷糊!
s598653453 2016-12-29
  • 打赏
  • 举报
回复
根本就不懂楼主你在说啥。。。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧