求教——水仙花数算法

问题描述

打印所有的“水仙花数”:满足以下条件:一,“水仙花数”都是三位数;二,每位数的三次方之和正好等于这个数,例:153=1*1*1+5*5*5+3*3*3PS:本人为JAVA刚入门菜鸟,希望前辈们赐教,谢谢。

解决方案

解决方案二:
intm,a,b,c;for(m=100;m<=999;m++){a=m/100;b=m/10%10;c=m%10if(m=a*a*a+b*b*b+c*c*c){System.out.printf("%d",m);}}

解决方案三:
inti=Integer.MAX_VALUE;for(intj=0;j<=i;j++){ints=j;intsum=0;while(s!=0){sum=(s%10)*(s%10)*(s%10);s/=10;}if(sum==j)System.out.println(j);}
解决方案四:
引用1楼yewuqing007的回复:

Javacodeintm,a,b,c;for(m=100;m<=999;m++){a=m/100;b=m/10%10;c=m%10if(m=a*a*a+b*b*b+c*c*c){System.out.printf("%d",m);}}

这位仁兄的算法已经很简洁了,不过有点小错误,条件语句里面的比较符号应该是“==”,这位仁兄写成赋值符号了。另外,你学过其他的语言么?这不是纯java啊,这就是一个算法啊,用c或者c++都可以实现啊你是不是像弄清楚java编程的具体格式?
解决方案五:
引用2楼wyang1991的回复:

inti=Integer.MAX_VALUE;for(intj=0;j<=i;j++){ints=j;intsum=0;while(s!=0){sum=(s%10)*(s%10)*(s%10);s/=10;}if(sum==j)System.out.println(j);}

这位仁兄是不是想把所有的满足那个条件的数全部找出来?如果按照楼主的要求,这个算法已经很多余了啊,何必多运算那么多次呢?另外,while循环里面的sum=(s%10)*(s%10)*(s%10)应该是sum+=(s%10)*(s%10)*(s%10);否则你找出来的答案肯定是错误的
解决方案六:
这是我平时记的一些常见算法、、希望对你有帮助、、、问题:水仙花数指三位数中,每个数字的立方和和自身相等的数字,例如370,3×3×3+7×7×7+0×0×0=370,请输出所有的水仙花数。该问题中体现了一个基本的算法——数字拆分,需要把一个数中每位的数字拆分出来,然后才可以实现该逻辑。实现思路:循环所有的三位数,拆分出三位数字的个位、十位和百位数字,判断3个数字的立方和是否等于自身。则实现的代码如下所示:for(inti=100;i<1000;i++){//循环所有三位数inta=i%10;//个位数字intb=(i/10)%10;//十位数字intc=i/100;//百位数字//判断立方和等于自身if(a*a*a+b*b*b+c*c*c==i){System.out.println(i);}}在该代码中,拆分个位数字使用i和10取余即可,拆分十位数字时首先用i除以十,去掉个位数字,并使原来的十位数字变成个位,然后和10取余即可,因为i是一个三位数,所以i除以100即可得百位数字,因为这里都是整数除法,不存在小数的问题。然后只需要判断立方和是否等于自身即可。注意:因为i是循环变量,这里不能改变i的值,不然可能造成死循环。完整程序:publicclassnarcissus{publicstaticvoidmain(String[]args){for(inti=100;i<1000;i++){//循环所有三位数inta=i%10;//个位数字intb=(i/10)%10;//十位数字intc=i/100;//百位数字//判断立方和等于自身if(a*a*a+b*b*b+c*c*c==i){System.out.println(i);}}}}
解决方案七:
while(i<1000){j=i/100;k=(i-j*100)/10;l=i%10;if((Math.pow(j,3)+Math.pow(k,3)+Math.pow(l,3))==i)System.out.println(i+"是水仙花数");i++;}
解决方案八:

publicclassdaffodil{publicstaticvoidmain(String[]args){inti,a,b,c;System.out.println("1000内的水仙花数:");for(i=100;i<1000;i++){a=i/100;b=(i/10)%10;c=i%10;if(i==a*a*a+b*b*b+c*c*c){System.out.print(i+"");}}}}
解决方案九:
该回复于2011-03-14 09:04:34被版主删除
解决方案十:
好了我也不说了ls的都回答了--------
解决方案十一:
好了我也不说了ls的都回答了--------
解决方案十二:
好了我也不说了ls的都回答了--------
解决方案十三:
好了我也不说了ls的都回答了--------
解决方案十四:
这个不难吧?publicstaticvoidmain(Stringargs[]){inta,b,c,d,num=0;for(inti=101;i<1000;i++){a=i/100;b=i/10-a*10;c=i%10;d=a*a*a+b*b*b+c*c*c;if(i==d){num++;System.out.println("水仙花数"+num+":"+i);}}}

解决方案十五:
多思考一下应该可以解决的。
解决方案:
其实你上google搜索下就行。
解决方案:
非常感谢大家这是小弟第一次发帖求问懂了懂了。。谢谢
解决方案:
這老多算法.你要在不明白就笨了

时间: 2024-10-29 16:38:11

求教——水仙花数算法的相关文章

语言 水仙花数算法-水仙花数代码如何减短运行时间

问题描述 水仙花数代码如何减短运行时间 水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身.例 如:153 = 13 + 53+ 33. 本题要求编写程序,计算所有N位水仙花数. 输入格式: 输入在一行中给出一个正整数N(3<=N<=7). 输出格式: 按递增顺序输出所有N位水仙花数,每个数字占一行. 输入样例:3 输出样例:153 370 371 407 我的代码运行起来超时;我知道可能是n=7时循环次数太多造成的.有什么办法解决呢 include inc

水仙花数的vfp实现

水仙花数的实现是一个比较经典的算法题,今天我们首先在vfp中来实现它. 首先我们了解一下什么是"水仙花数".所谓水仙花数是指一个n位数,其各位数字立方和等于该数本身的值,例如:153=13+53+33 ,所以153是一个水仙花数. 我们来做一个简单点儿的:求解3位数的水仙花数,即100至999之间的水仙花数.很明显这个程序需要使用循环,并且从水仙花数的概念可知,其重点是求解出循环变量当前值的各位数字的值.剩下的工作就简单了,把求解出的各位数字的立方和与循环变量当前值进行比较,如果相等则

输出100-1000之间所有的“水仙花数”

查看全套"c语言习题集" 题目: 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方. 1.程序分析: 利用for循环控制100-999个数,每个数分解出个位,十位,百位. 2.程序源代码: #include "stdio.h"#include "conio.h"main(

php中如何求水仙花数优化

水仙花数是指一个n位数(n>=3),它每个位上数字的n次幂之和等于它本身,n为它的位数.(例如:1^3+5^3+3^3 = 153) 水仙花数又称阿姆斯特朗数. 三位的水仙花数有4个:153,370,371,407 四位的水仙花数有3个:1634,8208,9474 五位的水仙花数有3个:54748,92727,93084 六位的水仙花数有1个:548834 七位的水仙花数有4个:1741725,4210818,9800817,9926315 八位的水仙花数有3个:24678050,246780

C语言经典算法例题求100-999之间的“水仙花数_C 语言

题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方. 实现代码如下 #include <iostream> #include <Cmath> using namespace std; /* 求100-999之间的水仙花数 */ int main() { int number,hun,ten

水仙花数&amp;amp;素数&amp;amp;质因数分解的C语言实现

最近,我翻了一下之前的C语言教材,看了三个有意思的小程序,包括:寻找"水仙花数".判断某数是否为素数.对一个数进行质因数分解.我想把这三个东西放到一个程序中,便写下了此文.   算法步骤 1. 寻找"水仙花数". "水仙花数"是指一个三位数,其各位数字的立方和等于该数本身.例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方.   2. 判断某数是否为素数. 素数是指只能被1和它本身整除的数,判断一个

C++实现输出三位数字的水仙花数

问题描述 C++实现输出三位数字的水仙花数 水仙花数是指一个n(>=3)位数字的数,它等于每个数字的n次幂之和. 编程输出3位水仙花数 解决方案 void main() { int n = 100; int a, b, c; for( n=100;n<=999;n++) { a = n/100; b = n/10%10; c = n%10; if ( n==(a*a*a+b*b*b+c*c*c)) { printf("%d %d %dn",a,b,c); } } }

php实现水仙花数的4个示例分享

 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 3^3+ 5^3 = 153)这篇文章主要介绍了php实现水仙花数的4个示例分享,需要的朋友可以参考下 示例1:    代码如下: <?php for($q=1;$q<=9;$q++){     for($w=0;$w<=9;$w++){       for($e=0;$e<=9;$e++){         if($q*$q*$q + $w*$w*$w + $e*$e*

php实现水仙花数示例分享

 这篇文章主要介绍了php实现水仙花数示例,需要的朋友可以参考下 自幂数,又称阿姆斯特朗数,民间通称水仙花数.实则只有3位自幂数才是水仙花数.4位5位6位等等各有别的叫法. 代码如下: <?php //阿姆斯特朗数:一个k位数,它的每个位上的数字的k次幂之和等于它本身.(例如:1^3 + 5^3 + 3^3 = 153) class Armstrong {    static function index(){   for ( $i = 100; $i < 100000; $i++ ) {