标题:求大神指点,题目如下,要把 1 到 10000 的自我数输出来,可是输出只剩下后 ...
只看楼主
目木
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-9-13
结帖率:0
已结贴  问题点数:2 回复次数:14 
求大神指点,题目如下,要把 1 到 10000 的自我数输出来,可是输出只剩下后面了
求大神指点,题目如下,要把1到10000的自我数输出来,可是输出只剩下后面了
1949年,印度数学家D.R.Kaprekar发现了一类叫做自我数(self number)的数。对于任一正整数n,定义d(n)为 n 加上 n 的每一位数字得到的总和。
例如,d(75) =75+7+5=87。
取任意正整数n作为出发点,你可以建立一个无穷的正整数序列 n, d(n), d(d(n)) ……
例如,如果你从33开始,下一个数字就是33+3+3=39,再下一个是39+3+9=51,再下一个是51+5+1=57,…。如此便产生一个整数数列:
33, 39, 51, 57, 69, 84, 96 ,111, 114 ,120 ,123, 129, 141,……
数字n被叫做整数d(n)的生成器。在如上的数列中,33是39的生成器,39是51的生成器,51是57的生成器,等等。
有些数字有多于一个生成器,如101有两个生成器,91和100。而一个没有生成器的数字则称作自我数(self number)。100以内的自我数共有13个:1,3,5,7,9,20,31,42, 53,64,75,86和97。


#include<stdio.h>
int main()
{
    long a[10000];
    long i;
    for(i=0;i<10000;i++)
        a[i]=0;

for(i=1;i<10000;i++)

    {if(i<=9)
a[i+i]=1;
if(i>9&&i<=99)
a[i+i/10+i%10]=1;
if(i>99&&i<=999)
a[i+i/100+i%100/10+i/100%10]=1;   
if(i>99&&i<=999)
a[i+i/100+i/10+i%10]=1;   
if(i>999&&i<=9999)
a[i+i/1000+i%1000/100+i%1000%100/10+i%10]=1;

   
}
for(i=1;i<10000;i++)
if(a[i]==0)
printf("%ld\n",i);
return 0;
}
搜索更多相关主题的帖子: 印度 正整数 数学家 出发点 number 
2014-09-13 16:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:1 
只剩后面,滚屏了呗。

授人以渔,不授人以鱼。
2014-09-13 17:02
目木
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-9-13
得分:0 
回复 2 楼 TonyDeng
那要怎么解决才能全部输出来
2014-09-13 17:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
输出一屏之后暂停

授人以渔,不授人以鱼。
2014-09-13 17:15
目木
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-9-13
得分:0 
回复 4 楼 TonyDeng
没法停止
2014-09-13 17:23
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
得分:1 
适当的处理一下,可以考虑每输出10个数字就暂停一下.

但是,楼主的算法有问题:

程序代码:

......
if(i>99&&i<=999)
a[i+i/100+i%100/10+i/100%10]=1;    
if(i>99&&i<=999)
a[i+i/100+i/10+i%10]=1; 
......
    


[ 本帖最后由 vvvcuu 于 2014-9-13 18:50 编辑 ]

代码测试环境:  WinXP+C-Free5.0.
2014-09-13 18:46
目木
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-9-13
得分:0 
回复 6 楼 vvvcuu
求指点,怎么改算法比较好
2014-09-13 19:54
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
得分:0 
回复 7 楼 目木
这个地方是重复了,可能会导致一下数字判断错误.简单改一下就可以了.


暂停的话可以考虑加入以下代码:
程序代码:

if(i%10==0)
getchar();


具体在什么地方加,需要注意什么,自己考虑一下吧.

代码测试环境:  WinXP+C-Free5.0.
2014-09-13 20:07
目木
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-9-13
得分:0 
有要求不允许有输入
2014-09-13 20:26
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
得分:0 
回复 9 楼 目木
程序代码:
#include <stdlib.h>
......
if(i%10==0)
system(pause);
......

代码测试环境:  WinXP+C-Free5.0.
2014-09-13 20:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-436038-1-1.html




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

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