黑客X档案官方论坛's Archiver

521322132 发表于 2008-5-28 04:32

求水仙数

[quote]原帖由 [i]ai357299256[/i] 于 2008-4-29 16:13 发表 [url=http://www.hackerxfiles.net/redirect.php?goto=findpost&pid=767042&ptid=98055][img]http://www.hackerxfiles.net/images/common/back.gif[/img][/url]
哈哈,for 语句。 教材上还有怎么一道题 ,和这个差不多。编程找出一亿以内的水仙花数。所谓水仙花数就是各位数字的立方和等于该数本身。如 153=1*1*1+5*5*+3*3*3,有兴趣的话自己可以做下。 ... [/quote]

#include<iostream>
#include<math.h>
using namespace std;
//i=153,n=3 ;j=1,k=3;j=2 k=8
int main()
{
int i,j,k,n;     //i是用来循环,n用来判断几位数

for (i=1;i<=100000000;i++)  //最多9位数
{   
n=0;
if ((i/10)<1)           //用switch,case做可以写的简单些
  n=1;
else if ((i/100)<1)  
  n=2;
  else if ((i/1000)<1)  
  n=3;
else if ((i/10000)<1)  
  n=4;
else if ((i/100000)<1)  
  n=5;
else if ((i/1000000)<1)  
  n=6;
else if ((i/10000000)<1)  
  n=7;
else if ((i/100000000)<1)  
  n=8;
else if ((i/1000000000)<1)  
  n=9;
   
k=0;
    for(j=1;j<=n;j++)  
  k=k+pow((int(i/(pow(10,(j-1)))))%10,3);  //(int{ i初以(10的j-1次方)}再%10)的立方
    if (k==i) cout<<i<<endl;   
}
return 0;
}

//得到结果1,153,370,371,407

拈花 发表于 2008-5-28 06:02

看一下,学习。

jacky124 发表于 2008-5-29 23:14

................看看~!

Gip0 发表于 2008-5-30 22:10

我用深搜,总感觉光用循环不太对呢。。。
不过,我这个深搜是讲顺序的,所以结果很可怕。
如果要计算N=100,请把输出方案的语句注释掉。
N是总钱数,用分表示。



/*
By Gip0
20080530 2142
*/


#include <stdio.h>
#include <stdlib.h>

bool func(int n);
bool print(int n);

int N = 5;    //money (cents) in total
int notes[] = {1, 2, 5};

int steps[101] = {0};
long results = 0;

int main()
{
    func(1);
   
    printf("%d\n", results);
   
    system("PAUSE");
return 0;
}

bool func(int n)
{
    for(int i = 0;i <= 2;i++)
    {
        if(N - notes[i] < 0)
            continue;
        
        if(N - notes[i] > 0)
        {
            steps[n] = i;
            N -= notes[i];
            
            func(n + 1);
            
            N += notes[i];
            steps[n] = 0;
        }
        
        if(N - notes[i] == 0)
        {
            steps[n] = i;
            print(n);
        }
    }
return 0;
}

bool print(int n)
{
     
     for(int i = 1;i <= n;i++)
         printf("%d ", notes[steps[i]]);
     printf("\n");
     
     results++;
return 0;
}

xuguan21 发表于 2008-6-1 17:01

看看。。。。。。。。。。。。。。。

FENG264290605 发表于 2008-6-2 06:08

呵呵  .....for   语句和if语句的结合...然后输出

greyzonex 发表于 2008-6-2 19:46

貌似不会很难。。。。。。。。。。。。。。。。。。。。。。。。。

greyzonex 发表于 2008-6-2 19:54

#include <iostream.h>

void main()
{
        int i,j,k;
        for (i=1;i<100;i++)
                for(j=1;j<20;j++)
                        for(k=1;k<50;k++)
                                if ((i+2*j+5*k)==100)
                                        cout<<"一分的:"<<i<<"  二分的:"<<j<<"  五分的:"<<k<<endl;
}

孤星独吟 发表于 2008-6-3 08:03

我看看::11:: ::11:: ::11:: ::11:: ::11:: ::11:: ::11:: ::11::

飓风 发表于 2008-6-3 08:29

呵呵  我还是对方法比较感兴趣 找一下新思路

jefcs110 发表于 2008-6-4 13:54

很想看看答案::03:: ::03:: ::03::

QISON 发表于 2008-6-4 14:22

对于I和J 的取值范围是不是有点~~~~~~~~~~~~~~~

black_eyes 发表于 2008-6-4 16:49

学习下,最近在研究c++::11:: ::11::

yszzql 发表于 2008-6-4 21:06

::04:: ::04:: ::04:: 看看答案在说

1125721 发表于 2008-6-4 21:23

感谢楼主::04:: ::04:: ::04::

haoxue2008520 发表于 2008-6-22 21:23

hehe

先看看..........::08:: ::08:: ::08:: ::08::

小力 发表于 2008-6-22 21:55

let  me  have a look .........................................

skiy 发表于 2008-6-23 10:17

...顶一下!!!::02:: ::04::

Mua 发表于 2008-6-24 00:49

先看看。。。。。。。。。。。。。。。。

softwareboy 发表于 2008-6-24 09:33

看看啦呵呵::01::    20个字节的限制呢啊

页: 1 2 3 [4] 5 6 7 8 9 10 11 12 13


Powered by Discuz! 6.1.0  © 2001-2007 Comsenz Inc.