39位水仙花数的优化算法? 求水仙花数的算法
C语言水仙花数算法
#include<stdio.h>
int main()
{
int i,j,k,n;
printf("水仙花数是:");
for(n=100;n<=999;n++)
{
i=n/100;
j=n%100/10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)//=改为==
//printf("%d",n);
//printf(" ");//以上两句合并为下面这一句,否则会有大量空格
printf("%d ",n);
}
return 0;}
水仙花数的算法
Private Sub Form_Click()
Dim a As Long, b As Long, c As Long, x As Long, y As Long, z As Long, t As Long
t = a * 100 + b * 10 + c
For a = 1 To 9
For b = 1 To 9
For c = 1 To 9
z = c ^ 3
y = b ^ 3
x = a ^ 3
if t = x + y + z then
Print a
Print b
Print c
Next c
Next b
Next a
End Sub
水仙花数(算法就行)代码随意
拜托,50位的你要电脑怎样的速度啊!
我编了个js的,运算6位的,就要了6-7秒的时间,运算50位,铁定死机了,代码再怎么优化,需要运算的次数或是遍历位数是一定的,这是高度运算量的编程,我没找到好的算法.先贴给你我的代码.
刚刚修改过,再贴一遍!
我添加了部分注释,优化了一下代码,加了段求个数的代码,再贴给你一下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3./TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3./1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript">
function fun(){
//取得参量位数
var valnum=parseInt(document.frm.input.value);
//求得符合参量位数的最大值和最小值
var highnum=Math.pow(10,valnum)-1;
var lownum=Math.pow(10,valnum-1);
//输出队列的组成部分
var output="共有个数:",res_str="";
//a为i分解为数组的下脚值,num为符合规则的水仙花的个数
var a=0,num=0;
//遍历所有符合参量位数的数
for(i=lownum;i<=highnum;i++){
//res为水仙花数规则值,即n位的数的每位数的n次幂的和,预置为0
var res=0;
//分解出当前i的每位数并存如数组
var new_i=i.toString().split("");
for(a=0;a<=valnum-1;a++){
//求得水仙花数规则值
res=Math.pow(parseInt(new_i[a]),valnum)+res;
}
//判断符合水仙花数的个数,如符合则将水仙花数并入输出队列
if(res==i){
num++;
res_str=res_str+"<br>"+res;
}
}
//输出队列
if(valnum<3){output="你输入了无效位数!";}
else{output=output+num+res_str;}
//输出
document.getElementById("divnum").innerHTML=output;
}
</script>
</head>
<body><form name="frm">
<label>请输入水仙花的位数(N>=3):</label><input type="text" name="input" value="">
<input value="运算" type="button" onclick="fun()" />
</form>
<div id="divnum" style=" position:absolute;left:100px;width:200px;top:100px;"></div>
</body>
</html>
以上另存为html文件,用浏览器打开就行.
另:百度百科附有其他语言的编程方法,我看了一下,好像就只是算100-999的固定位数的水仙花数,没有提供可变位数参量.我补充了一下那个词条.你可以借鉴一下.
http://baike.baidu/view/152077.htm
java中求解水仙花数的算法思想是什么?
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
从上面的定义可以看出,只要将给出的数字各个位数的数字分解出来,然后把个数字的3次方相加与原数相比是否相等即可判断出是否为水仙花数,给你一段源码,是求100~1000内的水仙花数,有注释,希望对你有帮助:
public class Wflower {
public static void main(String[] args) {
int a=0,b=0,c=0;
System.out.println("水仙花数是:");
for (int i = 100; i < 1000; i++) //遍历所有3位数
{
a = i/100; //获取3位数中百位的数
b=i%100/10; //获取3位数中十位的数
c=i%100%10; //获取3位数中个位的数
a = a * a * a; //计算第一位数的立方
b = b * b * b; //计算第二位数的立方
c = c * c * c; //计算第3位数的立方
if ((a + b + c) == i) //如果符合水仙花数
System.out.print(" "+i);
}
}
}