java面试题【递归】和【循环】的考察7月中旬

来源:互联网 发布:mac用户登录界面卡住 编辑:程序博客网 时间:2024/05/21 10:42
/*
分别定义三个方法类:
 一个Fan类调用个方法。


QiuHe    问题一:

求特殊数列的前n项和

求数列的前N项和: 2/1 + 3/2 + 5/3 + 8/5 + 13/8 + 21/13 + ... +m/n


High100  

问题二:

 问题描述:一个小球从100米高处自由落下,每次弹起的高度是当前高度的一半。

求第十次反弹多高,十次共走了多长路径


PrintNum 

   问题三:

  打印所有的水仙花数

   三位数 各位的平方之和 等于 这个数本身 则为水仙花数



*/
public class Fan
{
public static void main(String[] args)
{
//1,求特殊数列的前n项和
QiuHe q = new QiuHe();
double sum = q.function(10);//求前10项之和
double a = q.funM(6);
double b = q.funN(6);
System.out.println("第十项的m和n分别是:m=="+a+"n=="+b);
System.out.println("数列的前n项和为:"+sum);

//2,求第十次反弹多高,十次小球进过的路径之和
High100 h = new High100();
double high = h.funThHigh(10);
double sumHigh = h.funSumHigh(10);
System.out.println("十次共经过:"+sumHigh +"米");
System.out.println("求第十次反弹多高:"+high+"米");
//3,打印水仙花数
PrintNum p = new PrintNum();
p.fun();
}
}
class QiuHe
{
public double function(double n)//n 代表的是求前n项的和
{
if(n==1)
return funM(1)/funN(1);
if(n==2)
return funM(2)/funN(2)+function(1);
else 
return funM(n)/funN(n)+function(n-1);
}
public double funM(double m)
{
if(m==1)
return 2;
if(m==2)
return 3;
else
return funM(m-2)+funM(m-1);
}
public int funN(double n)
{
if(n==1)
return 1;
if(n==2)
return 2;
else
return funN(n-2)+funN(n-1);
}
}
class High100
{
double sum;
public double funSumHigh(int n)
{
double high = 100;

for(int i = 0 ; i<10; i++)
{
high = high/2;
sum = sum + high*2;
}
return sum+100;
}
public double funThHigh(int n)
{
double high = 100;
for( int i = n; i>0;i--)
{
high = high/2;
}
return high;  
}

}
class PrintNum
{ //定义 个位,十位,百位 并初始化。
int g=1;
int s=1;
int b=1;
public void fun()
{
for(int m = 1 ; m<10 ; m++)
{
for(int i = 0; i<10; i++)
{
for(int j = 0; j<10; j++)
{
int ge,shi,bai;
ge = j;
if(i==0)
shi = 10;
shi = i*10;
bai = m*100;


//将循环中可能出现的每一种情况的 个 十 百 位 赋值给 g,s,b


g = j;
s = i;
b = m;


int sum = ge+shi+bai;


if(g*g*g+s*s*s+b*b*b==sum)//输出符合条件的数 
System.out.println("水仙花数有:"+sum);

}
}
}
}
}
0 0
原创粉丝点击