| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3658 人关注过本帖
标题:找不到思路。水仙花
只看楼主 加入收藏
jtsqrj
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2016-10-13
结帖率:25%
收藏
 问题点数:0 回复次数:11 
找不到思路。水仙花
输入一个3到7的正整数n,输出所有n为数的水仙花数。比如输入3,就会输出3位的水仙花数。。。想了好久都找不到什么思路。。。求助。。。
搜索更多相关主题的帖子: 水仙花 正整数 
2016-10-18 22:52
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
输入3
从100都999遍历 用for(100<i<999)循环
i/100 ... 得到百位数字....a
i/10%10 ... 得到十位数字...b
i%10 ... 得到个位数字....c
判断水仙花数成立与否的条件 if(a^3+b^3+c^3==i) ----> 输出i



早知做人那么辛苦!  当初不应该下凡
2016-10-19 05:50
lfbb
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-10-19
收藏
得分:0 
我也不会
2016-10-19 12:51
chenchen224
Rank: 4
等 级:业余侠客
威 望:1
帖 子:61
专家分:237
注 册:2016-8-11
收藏
得分:0 
上百度搜索了一个,怎么不试试查找一下资料呢。
#include<stdio.h>
int main()
{
 int i,a,b,c;
 for(i=100;i<1000;i++)
 {
  a=i/100;
     b=(i/10)%10;
     c=i%10;
  if((a*a*a+b*b*b+c*c*c)==i)
  printf("%d\n",i);
 }
 return(0);
}

我想做的,只是静静的把C学好,从此代码是爱人......
2016-10-19 14:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
算法:这n位中有a个1,b个2,c个3,……,i个9,满足 a+b+c+……+i <= n

程序代码:
#include <stdio.h>

void foo( unsigned n )
{
    static unsigned long long table[11][11] = { 0 };
    if( table[0][0] == 0 )
    {
        for( size_t i=0; i!=sizeof(table)/sizeof(*table); ++i )
        {
            unsigned long long t = 1;
            for( size_t j=0; j!=sizeof(*table)/sizeof(**table); ++j, t*=i )
                table[i][j] = t;
        }
    }

    for( unsigned a=0; a<=n; ++a )
    for( unsigned b=0; b<=n-a; ++b )
    for( unsigned c=0; c<=n-a-b; ++c )
    for( unsigned d=0; d<=n-a-b-c; ++d )
    for( unsigned e=0; e<=n-a-b-c-d; ++e )
    for( unsigned f=0; f<=n-a-b-c-d-e; ++f )
    for( unsigned g=0; g<=n-a-b-c-d-e-f; ++g )
    for( unsigned h=0; h<=n-a-b-c-d-e-f-g; ++h )
    for( unsigned i=0; i<=n-a-b-c-d-e-f-g-h; ++i )
    {
        unsigned long long sum = a*table[1][n] + b*table[2][n] + c*table[3][n] + d*table[4][n] + e*table[5][n] + f*table[6][n] + g*table[7][n] + h*table[8][n] + i*table[9][n];
        if( sum >= table[10][n-1] )
        {
            unsigned buf[10] = { 0, a, b, c, d, e, f, g, h, i };
            for( unsigned long long s=sum; s; s/=10 )
                --buf[s%10];
            if( buf[1]==0 && buf[2]==0 && buf[3]==0 && buf[4]==0 && buf[5]==0 && buf[6]==0 && buf[7]==0 && buf[8]==0 && buf[9]==0 )
                printf( "    %llu\n", sum );
        }
    }
}

int main( void )
{
    puts("3位水仙花有:"); foo(3);
    puts("4位水仙花有:"); foo(4);
    puts("5位水仙花有:"); foo(5);
    puts("6位水仙花有:"); foo(6);
    puts("7位水仙花有:"); foo(7);
    puts("8位水仙花有:"); foo(8);
    puts("9位水仙花有:"); foo(9);
    puts("10位水仙花有:"); foo(10);

    return 0;
}


输出:
3位水仙花有:
    407
    370
    371
    153
4位水仙花有:
    9474
    8208
    1634
5位水仙花有:
    54748
    93084
    92727
6位水仙花有:
    548834
7位水仙花有:
    9800817
    9926315
    4210818
    1741725
8位水仙花有:
    88593477
    24678050
    24678051
9位水仙花有:
    534494836
    472335975
    912985153
    146511208
10位水仙花有:
    4679307774
2016-10-19 15:31
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
你们没有完全解决他的问题,他意思是3-7之间先输入一个n,然后根据n来判断后面是几位数的水仙花数。你们只是提供了3位数的算法,我估计他是不是不知道怎么根据输入的n来选择几位数,而不是不会水仙花的判断。
我有一个不是很优化的方法,但胜在容易理解,用switch语句,来判断是几位数,后面就用楼上各位的判断算法就可以了,只是不同位数的算法稍微有点不同,毕竟数字个数不同。大体判断方法是一样的。
先有个思路,然后优化代码,不过另外还百度了一个C++的你可以参考下:
程序代码:
#include<iostream>
#include <cmath>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    long n1, n2, a;
    int i;
    cout << "请输入Narcissistic number的位数:" << endl;
    cin >> i;
    cout << i << "位数的Narcissistic number包括:" << endl;
    for (n1 = pow(10, i - 1); n1 < pow(10, i); n1++)
    {
        n2 = 0;
        for (int j=0; j < i; j++)
        {
            a = pow(10, j);
            a = n1 / a;
            a = a % 10;
            a = pow(a, i);
            n2 = n2 + a;
        }
        if (n1 == n2)
            cout << n1 << endl;
    }
    return 0;
}
2016-10-19 15:33
lfbb
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-10-19
收藏
得分:0 
回复 4楼 chenchen224
我是这样做的,但答案是格式错误
2016-10-19 16:36
lfbb
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-10-19
收藏
得分:0 
#include<stdio.h>
int main(void)
{
     int a,b,c,i;
    for(i=100;i<=999;i++){
   a=i/100;
   b=i/10%10;
   c=i%10;
  if(a*a*a+b*b*b+c*c*c==i){
printf("%5d\n",i);
}
}
   return 0;
}



 
2016-10-19 16:45
lfbb
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-10-19
收藏
得分:0 
#include<stdio.h>
int main(void)
{
     int a,b,c,i;
    for(i=100;i<=999;i++){
   a=i/100;
   b=i/10%10;
   c=i%10;
  if(a*a*a+b*b*b+c*c*c==i){
printf("%5d\n",i);
}
}
   return 0;
}



 
2016-10-19 16:45
lfbb
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-10-19
收藏
得分:0 
回复 7楼 lfbb
打印水仙花数。水仙花数是一个三位数,其各位数字的立方和与原数相等。
输出格式:

按递增顺序输出所有水仙花数,每个数输出占5列。
输出样例:

  153  370  371  407
2016-10-19 16:45
快速回复:找不到思路。水仙花
数据加载中...
 
   



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

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