| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3277 人关注过本帖
标题:大家帮忙看看这道水仙花数题啊
只看楼主 加入收藏
RWBY
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
大家帮忙看看这道水仙花数题啊
这是一道水仙花数的题
但是这个水仙花数不止,不一定是三位的。
我本人苦思冥想仍无能为力。
请先生教我!!
水仙花数(daffodils number)是指一个 n 位数 ( n ≥ 3 ),它的每个位上的数字的 n 次幂之和等于它本身。
例如:1^3 + 5^3 + 3^3 = 153
有多个测试用例,每个测试用例占一行,是一个正整数n ( 3 ≤ n ≤ 6 )
对每个测试用例,从小到大输出所有n位的水仙花数,一个一行。



搜索更多相关主题的帖子: number 水仙花 正整数 
2015-11-15 22:52
RWBY
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-15
收藏
得分:0 
用for循环仅能解决三位数的水仙花。
2015-11-15 22:58
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1698
专家分:4310
注 册:2007-12-27
收藏
得分:5 
那就改用while吧

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2015-11-15 23:17
勿忘我心
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2015-11-14
收藏
得分:5 
回复 楼主 RWBY
可以看看这个程序
#include <stdio.h>
int main(void)
{
int a,b,c,d;
system("cls");
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
printf("%d%d%d\n",a,b,c);
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
if(1000*a+100*b+10*c+d==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
printf("%d%d%d%d\n",a,b,c,d);
getch();
}

或者这样:
#include <stdio.h>
int main(void)
{
int a,b,c,d;
system("cls");
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{
if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
printf("%d%d%d\n",a,b,c);
for(d=0;d<=9;d++)
if(1000*a+100*b+10*c+d==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
printf("%d%d%d%d\n",a,b,c,d);
}
getch();
}
2015-11-16 09:20
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:5 
以下是引用RWBY在2015-11-15 22:58:14的发言:

用for循环仅能解决三位数的水仙花。
以下代码搜索出8位(包括8位)以内的水仙花数
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned map[11][9];
    for( unsigned n=0; n!=11; ++n )
    {
        map[n][0] = 1;
        for( unsigned m=1; m!=9; ++m )
            map[n][m] = map[n][m-1] * n;
    }

    for( unsigned n=100,m=3; n!=100000000; ++n )
    {
        if( n >= map[10][m] )
            ++m;

        unsigned sum = 0;
        for( unsigned t=n; t; t/=10 )
            sum += map[t%10][m];

        if( sum == n )
            printf( "%u\n", n );
    }

    return 0;
}
输出
153
370
371
407
1634
8208
9474
54748
92727
93084
548834
1741725
4210818
9800817
9926315
24678050
24678051
88593477

2015-11-16 09:23
RWBY
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-15
收藏
得分:0 
回复 4楼 勿忘我心
你这样也只能解决4位的水仙花数啊
至少得六位。
2015-11-16 13:24
RWBY
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-15
收藏
得分:0 
回复 5楼 rjsp
哪个 map什么的看不懂啊
我能直接用switch语句水过去吗?
2015-11-16 13:26
RWBY
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-15
收藏
得分:0 
#include<stdio.h>
int main()
{
    int sum,a,b,c,n;
    while(scanf("%d",&n)==1){
    switch(n){
        case'3':
        for(a=1;a<=9;a++)
        for(b=0;b<=9;b++)
        for(c=0;c<=9;c++)
             if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
             {sum=a*a*a+b*b*b+c*c*c;
                printf("%d",sum);
            break;}
                }}
}
为什么这样也不行,
求教。
2015-11-16 14:14
柳逸尘
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:131
注 册:2015-8-10
收藏
得分:5 
回复 5楼 rjsp
for( unsigned t=n; t; t/=10 )
  不完整
2015-11-16 14:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用柳逸尘在2015-11-16 14:40:17的发言:

for( unsigned t=n; t; t/=10 )
  不完整

2015-11-16 15:42
快速回复:大家帮忙看看这道水仙花数题啊
数据加载中...
 
   



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

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