简单java编程题

水仙花数是指其个位、十位和百位三个数的立方和等于这个三位数本身,求出所有的水仙花数。
还有一个:求2!+4!+6!+8!

第1个回答  2008-05-30
水仙花数共有4个,分别为:153、370、371、407
( 例如:1^3 + 5^3 + 3^3 = 153 )
PHP“水仙花数”实现代码:
<?php
for($i=100;i$<1000;$i++)
{
$a = intval($i/100);
$b = intval($i/10)%10;
$c = $i%10;
if(pow($a,3)+pow($b,3))+pow($c,3) == $i)
{
echo $x.'</br>';
}
}
?>

C语言的"水仙花数"实现代码:
#include <stdio.h>
int main(void)
{
int a,b,c;
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);
return 0;
}

PASCAL实现代码:

program shuixianhuashu;

var
a,b,c:integer;
begin
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
if a*a*a+b*b*b+c*c*c=100*a+10*b+c then writeln(100*a+10*b+c);
end.

Visual Basic的"水仙花数"实现代码:

Private Sub Form_Click()
Dim a, b, c As Integer 'a(个)b(十)c(百)

For a = 0 To 9
For b = 0 To 9
For c = 1 To 9
If a ^ 3 + b ^ 3 + c ^ 3 = a + 10 * b + 100 * c Then
MsgBox 100 * c + 10 * b + a
End If
Next c
Next b
Next a

End Sub

FORTRAN的"水仙花数"实现代码:

WRITE(*,30)

DO 10 K=100,999

IA=K/100

IB=MOD(K,100)/10

IC=MOD(K,10)

IF(K.NE.IA**3+IB**3+IC**3) GOTO 10

WRITE(*,20)K, IA,IB,IC

10 CONTINUE

20 FORMAT(5X,4I4)

30 FORMAT(5X,18HN=I**3+J**3+K**3)

STOP

END

C++编译器上的水仙花数实现代码
#include<iostream>
using namespace std;
void main()
{
int a=100;
int q,w,e;
for(a;a<1000;++a)
{
q=a/100;
w=(a-q*100)/10;
e=(a-q*100-w*10);
if(a==q*q*q+w*w*w+e*e*e)
cout<<a<<"是水仙花数"<<endl;}
}

pyhon 中实现的代码
for i in range(1,10):
for j in range(0,10):
for k in range(0,10):
if i*100+j*10+k==i*i*i+j*j*j+k*k*k:
print i*100+j*10+k,

Java 中实现的代码
public class shuixianhua
{
public static void main(String[] args){
for(int i=1; i<=9; i++)
for(int j=0; j<=9; j++)
for(int k=0; k<=9; k++)
if(i*i*i+j*j*j+k*k*k == 100*i+10*j+k)
System.out.print(i*100+j*10+k+" ");
}
}

...说实话.我也不懂这个.只是.帮你找了好多资料.这个瞧着还像那么回事.不过 不知道可不可以帮到你.
第2个回答  2008-05-31
对于问题1: 从代码效率上来分析,程序对于100-999的所有数字都需要进行除法运算,并计算出每一个位数的大小,然后再用乘法计算结果,这样一来用了很多多余的计算,而且浮点效率低很多,不妨可以用上诉方法来观察效率上,缓存在这里减少了很多计算。请参看其中的print代码部分

对于问题2: 从效率上来分析,用一个num来记录计算过的阶乘,那么计算过程会快很多,可以减少很多重复的计算,具体代码如下,请参看其中的foo代码部分,例如计算输入8 6 4 2的时候,在计算8!的同时6!、4!、3!都已经被计算过了,所以可以直接返回,从效率上来分析,是快非常多的,有助于优化,否则,阶乘计算需要大量的运算过程。

public class Test{

private static int[] buf = new int[1000];

private static void print()
{
int i, j, k;
// num 缓存了所有的记录
int num[] = { 0*0*0 ,1*1*1, 2*2*2, 3*3*3, 4*4*4, 5*5*5 ,6*6*6, 7*7*7, 8*8*8, 9*9*9 };

for( i = 1; i <= 9; i++ )
{
int hun = i * 100; // 百位数字
for( j = 0; j <=9; j++ )
{
int ten = j * 10; // 十位数字
for( k =0 ; k <= 9; k++ )
{
int n = hun + ten + k;
if( num[i] + num[j] + num[k] == n)
System.out.println(n);
}
}
}
}

private static int foo( int i )
{
if( buf[i] != 0 ) return buf[i]; // 如果某个阶乘已经计算过,那么直接返回
else if( i == 1 ) return buf[i] = 1; // 递归到1,则结束
else return buf[i] = i * foo( i - 1 ); // 否则,递归计算该阶乘的数量,并缓存
}

public static void main( String[] args )
{
print(); // 问题1
// 下面为问题2
int sum = foo(2) + foo(4) + foo(6) + foo(8);
System.out.println( sum );
}
}
第3个回答  2008-06-01
第一题
public class A{
public static void main(String[] args){
int i,j,k,x;
for(x=100;x<=999;x++)
{
i=x/100;
j=x/10%10;
k=x%10;
if(x==i*i*i+j*j*j+k*k*k)
System.out.println(x);
}
}
}
第二题
public class A{
public static void main(String args[]){
int sum=0;
for(int j=2;j<=8;j+=2){
int x=1;
for(int i=1;i<j+1;i++){
x=x*i;
}
System.out.println(j+"!="+x);//可删去
sum=sum+x;
}
System.out.println(sum);
}
}本回答被提问者采纳
第4个回答  2008-05-30
1.
public class A{
public static void main (String args[]){
int a,b,c;
for(int i=100;i<1000;i++){
a=i/100;//百位
b=i/10-10*a;//十位
c=i-100*a-10*b;//个位
if(a*a*a + b*b*b +c*c*c == i)
System.out.println(i);
}
}
}

2.
public class B
{

public static void main (String args[]){
int sum=0,temp=1;
for(int i=2;i<=8;i=i+2){
for(int j=i;j>0;j--){
temp*=j;
}
sum+=temp;
temp=1;
}

System.out.println(sum);

}
}
第5个回答  2008-06-03
import java.util.ArrayList;
import java.util.List;

public class Test {
private static List<Integer> one() {
// TODO Auto-generated method stub
List<Integer> res = new ArrayList<Integer>();
for (int i = 1; i < 10; i++) {
for (int j = 0; j < 10; j++) {
for (int k = 0; k < 10; k++) {
if (i * i * i + j * j * j + k * k * k == i * 100 + j * 10
+ k)
res.add(i * 100 + j * 10 + k);
}
}
}
return res;
}

private static long jiechen(int src) {
long res=1;
for (int i = 2; i <= src; i++) {
res*=i;
}
return res;
}
public static void main(String[] args) {

// System.out.println(one());
System.out.println(jiechen(2)+jiechen(4)+jiechen(6)+jiechen(8));
}
}