文档库 最新最全的文档下载
当前位置:文档库 › JAVA经典算法50题

JAVA经典算法50题

JAVA经典算法50题
JAVA经典算法50题

【程序1】

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....

public static void main(String[]args)

{

Scanner sc=new Scanner(System.in);

System.out.println("请输入月数:");

int month=sc.nextInt();

int a=0,b=1,i,t;

for(i=2;i<=month;i++)

{

t=b;

b=a+b;

a=t;

}

System.out.println("第"+month+"个月有"+b+"对兔子!");

}

【程序2】

题目:判断101-200之间有多少个素数,并输出所有素数。

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,

则表明此数不是素数,反之是素数。

public static void main(String args[])

{

int i,n,flag;

for(n=101;n<200;n++)

{

flag=0;

for(i=2;i

{

if(n%i==0)

{

flag=1;

break;

}

}

if(flag==0)

{

System.out.println(i);

}

}

}

public static void main(String[]args)throws Exception

{

int i,j,count=0;

for(i=101;i<200;i++)

{

for(j=2;j<(int)(Math.sqrt(i)+1);j++)

{

if(i%j==0)

break;

}

if(j>(int)Math.sqrt(i))

{

System.out.println(i);

count++;

}

}

System.out.println("201到200之间共有"+count+"个素数!");

}

【程序3】

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。public static void main(String args[])

{

int a,b,c;

int n;

for(n=100;n<1000;n++)

{

a=n/100;

b=(n-a*100)/10;

c=n%10;

if(n==a*a*a+b*b*b+c*c*c)

{

System.out.println(n);

}

}

}

【程序4】

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

public static void main(String[]args)

{

Scanner sc=new Scanner(System.in);

System.out.println("请输入一个整数n:");

int n=sc.nextInt();

System.out.print(n+"=");

for(int k=2;k

{

if(n%k==0)

{

System.out.print(k+"*");

n=n/k;

}

else

k++;

}

System.out.println(n);

}

【程序5】

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

1.程序分析:(a>b)?a:b这是条件运算符的基本例子。

public static void main(String args[])

{

Scanner sc=new Scanner(System.in);

System.out.println("请输入学生成绩score:");

int score=sc.nextInt();

char c=(score>=90)?'A':((score<60)?'C':'B');

System.out.println("该学生分数是:"+score+"等级是:"+c);

}

【程序6】

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

1.程序分析:利用辗除法。

public static void main(String args[])

{

Scanner sc=new Scanner(System.in);

System.out.println("输入两个整数:a和b");

int a=sc.nextInt();

int b=sc.nextInt();

int na=a,nb=b;//令na和nb分别保存a和b的初始值

int t;//定义中间变量t

if(a

{

t=a;

a=b;

b=t;

}

t=a%b;

while(t!=0)

{

a=b;

b=t;

t=a%b;

}

System.out.println("最大公约数是:"+b);

System.out.println("最小公倍数是:"+na*nb/b);

}

【程序7】

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

1.程序分析:利用while语句,条件为输入的字符不为'\n'.

public static void main(String[]args)

{

Scanner sc=new Scanner(System.in);

String str=sc.nextLine();

int letterCount=0,numCount=0,spaceCount=0,otherCount=0;

for(int i=0;i

{

char c=str.charAt(i);

if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

letterCount++;

else if(c>='0'&&c<='9')

numCount++;

else if(c=='')

spaceCount++;

else

otherCount++;

}

System.out.println("字母有"+letterCount+"个");

System.out.println("数字有"+numCount+"个");

System.out.println("空格有"+spaceCount+"个");

System.out.println("其它有"+otherCount+"个");

}

【程序8】

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

1.程序分析:关键是计算出每一项的值。

public static void main(String args[])

{

Scanner sc=new Scanner(System.in);

System.out.println("输入一个数字a和项数n:");

int a=sc.nextInt();

int n=sc.nextInt();

String str="";

int s=0,sum=0;

int i;

for(i=0;i

{

s=s+(int)Math.pow(10,i)*a;

sum=sum+s;

str+=s+"+";

}

System.out.println("则有:"+str.substring(0,

str.length()-1)+"="+sum);

}

【程序9】

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

public static void main(String args[])

{

int i,n,sum=0;

System.out.println("输出1~1000的所有完数:");

for(n=1;n<=1000;n++)

{

for(i=1;i<=n/2;i++)

{

if(n%i==0)

{

sum=sum+i;

}

}

if(sum==n)

{

System.out.println(n);

}

sum=0;

}

}

【程序10】

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

public static void main(String args[])

{

Scanner sc=new Scanner(System.in);

System.out.println("请输入初始高度height和反弹起的次数n:");

int height=sc.nextInt();

int n=sc.nextInt();

double fheight=height/2;

double distance=height;

for(int i=2;i<=n;i++)

{

fheight=(double)height/(double)Math.pow(2,i);

distance=distance+(double)height/(double)Math.pow(2,

i-1)*2;

}

System.out.println("第"+n+"次落地时共经过"+distance+"米");

System.out.println("第"+n+"次弹起的高度是:"+fheight);

}

【程序11】

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉

不满足条件的排列。

public static void main(String args[])

{

int[]a={1,2,3,4};

int count=0;

for(int i=0;i<4;i++)

{

for(int j=0;j<4;j++)

{

for(int k=0;k<4;k++)

{

if(a[i]!=a[j]&&a[j]!=a[k]&&a[k]!=a[i])

{

System.out.println(a[i]+""+a[j]+""+a[k]);

count++;

}

}

}

}

System.out.println("共有"+count+"个数");

}

【程序12】

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万

元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部

分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可

提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

public class A2

{

public static void main(String[]args)

{

Scanner sc=new Scanner(System.in);

System.out.println("请输入利润profit:");

long profit=sc.nextLong();//输入利润数

double prize=0;//实发奖金数

if(profit<=10&&profit>=0)//利润<=10W,提10%

prize=profit*0.1;

else if(profit>10&&profit<=20)//利润<=20W,低于10W的部分按10%提,高于10W的部分按7.5%提

prize=10*0.1+(profit-10)*0.075;

else if(profit>20&&profit<=40)//利润<=40W,低于10W提10%,10W—20W 之间提7.5%,高于20W提5%

prize=10*0.1+10*0.075+(profit-20)*0.05;

else if(profit>40&&profit<=60)//利润<=60W,高于40W提3%

prize=10*0.1+10*0.075+20*0.05+(profit-40)*0.03;

else if(profit>60&&profit<=100)//利润<100W,高于60W提1.5% prize=10*0.1+10*0.075+20*0.05+20*0.03+(profit-60)*0.015;

else if(profit>100)//利润>100W,高于100W提1%

prize=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(profit-100)*0.01;

System.out.println("应发奖金为:"+prize+"万元!");

}

}

【程序13】

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问

该数是多少?

1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:

public static void main(String args[])

{

int a=1;

while(a<100000)

{

int i=1;

while(i

{

int j=1;

while(j

{

if(a+100==Math.pow(i,2)&&a+168==Math.pow(j,2))

{

System.out.println(a);

}

j++;

}

i++;

}

a++;

}

}

【程序14】

题目:输入某年某月某日,判断这一天是这一年的第几天?

1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第

几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

public static void main(String args[])

{

Scanner sc=new Scanner(System.in);

System.out.println("请输入年、月、日:");

int year=sc.nextInt();

int month=sc.nextInt();

int day=sc.nextInt();

int[]a={31,28,31,40,31,30,31,31,30,31,30,31};

int sum=0,i;

if((year%100!=0&&year%4==0)||year%400==0)

{

a[1]=29;

}

for(i=0;i

{

sum=sum+a[i];

}

sum=sum+day;

System.out.println(month+"月"+day+"日是"+year+"年的"+"第"+sum+"天");

}

【程序15】

题目:输入三个整数x,y,z,请把这三个数由小到大输出。

1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与

y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

public static void main(String args[])

{

Scanner sc=new Scanner(System.in);

System.out.println("输入三个整数x,y,z:");

int x=sc.nextInt();

int y=sc.nextInt();

int z=sc.nextInt();

int r;

if(x>y)

{

r=x;

x=y;

y=r;

}//令x

if(x>z)

{

r=x;

x=z;

z=r;

}//再令x

if(y>z)

{

r=y;

y=z;

z=r;

}//令y

System.out.println("该三位数从小到大顺序为:"+x+"<"+y+"<"+z);

}

【程序16】

题目:输出9*9口诀。

1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

public static void main(String args[])

{

for(int i=1;i<=9;i++)

{

for(int j=1;j<=i;j++)

{

System.out.print(i+"*"+j+"="+i*j+"\t");

}

System.out.println();

}

}

【程序17】

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下

的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。1.程序分析:采取逆向思维的方法,从后往前推断。

public static void main(String[]args)

{

int n=1;//第十天准备吃时剩下1个

int i;

for(i=9;i>0;i--)

{

n=(n+1)*2;

}

System.out.println("第一天共摘了"+n+"个桃子!");

}

【程序18】

题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单

public static void main(String[]args)

{

char ch1,ch2,ch3;

for(ch1='x';ch1<='z';ch1++)

{

for(ch2='x';ch2<='z';ch2++)

{

for(ch3='x';ch3<='z';ch3++)

{

if(ch1!='x'&&ch3!='x'&&ch3!='z'&&ch1!=ch2&&ch2!=ch3&&ch3!=ch1)

{

System.out.println("a-->"+ch1);

System.out.println("b-->"+ch2);

System.out.println("c-->"+ch3);

}

}

}

}

}

【程序19】

题目:打印出如下图案(菱形)

*

***

******

********

******

***

*

1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for 循环,第一层控制行,第二层控制列。

public static void main(String[]args)

{

Scanner sc=new Scanner(System.in);

int n=sc.nextInt();

int i,j;

for(i=0;i<(n+1)/2;i++)

{

for(j=0;j

{

if(j>=n/2-i&&j<=n/2+i)

System.out.print("*");

else

System.out.print("");

}

System.out.println();

}

for(i=n/2-1;i>=0;i--)

{

for(j=0;j

{

if(j>=n/2-i&&j<=n/2+i)

System.out.print("*");

else

System.out.print("");

}

System.out.println();

}

}

【程序20】

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

1.程序分析:请抓住分子与分母的变化规律。

public static void main(String[]args)

{

int i,j;

float a=1,b=2,c,d=0,t;

for(i=1,j=0;i<=20;i++,j++)

{

d=d+b/a;

t=a;

a=b;

b=t+b;

}

System.out.println("前20位数之和为:"+d);

}

【程序21】

题目:求1+2!+3!+...+20!的和

1.程序分析:此程序只是把累加变成了累乘。

public static void main(String args[])

{

int sum=0;

for(int i=1;i<=20;i++)

{

int fact=1;

for(int j=1;j<=i;j++)

{

fact=fact*j;

}

sum=sum+fact;

}

System.out.println("sum="+sum);

}

【程序22】

题目:利用递归方法求5!。

1.程序分析:递归公式:fn=fn_1*4!

public class A2

{

public int digui(int n)

{

if(n==1||n==0)

{

return1;

}

else

{

return n*digui(n-1);

}

}

public static void main(String args[])

{

A2a=new A2();

Scanner sc=new Scanner(System.in);

System.out.println("请输入一个整数:");

int n=sc.nextInt();

int result=a.digui(n);

System.out.println(n+"!="+result);

}

}

【程序23】

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

public static void main(String[]args)

{

int age=10;//第十天准备吃时剩下1个

int i;

for(i=2;i<=5;i++)

{

age=age+2;

}

System.out.println("第5个人是"+age+"岁!");

}

【程序24】

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。public static void main(String args[])

{

Scanner sc=new Scanner(System.in);

System.out.println("请输入一个不多于5位的正整数:");

int n=sc.nextInt();

String str=String.valueOf(n);//将整型n转换成一个字符串型

System.out.println("它是一个"+(str.length())+"位数");//打印字符串n的长度

System.out.print("数字逆向输出为:");

for(int i=0;i

{

if(n/10!=0)

{

System.out.print(n%10+"->");

n=n/10;

}

else

System.out.println(n);

}

}

【程序25】

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

public static void main(String args[])

{

Scanner sc=new Scanner(System.in);

System.out.println("请输入一个五位数:");

int num=sc.nextInt();

int a,b,c,d,e;

a=num/10000;

b=(num-a*10000)/1000;

c=(num-a*10000-b*1000)/100;

d=(num-a*10000-b*1000-c*100)/10;

e=num%10;

if(a==e&&b==d)

System.out.println("是回文");

else

System.out.println("不是回文");

}

【程序26】

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。

public static void main(String[]args)

{

Scanner sc=new Scanner(System.in);

char c=sc.next().charAt(0);

switch(c)

{

case'S':

case's':

System.out.println("请输入第二个字母:");

c=sc.next().charAt(0);

if(c=='u')

{

System.out.println("星期六");

break;

}

else if(c=='a')

{

System.out.println("星期日");

break;

}

else

{

System.out.println("输入错误!");

break;

}

case'M':

case'm':

System.out.println("星期一");

break;

case'T':

case't':

System.out.println("请输入第二个字母:");

c=sc.next().charAt(0);

if(c=='u')

{

System.out.println("星期二");

break;

}

else if(c=='h')

{

System.out.println("星期日");

break;

}

else

{

System.out.println("输入错误!");

break;

}

case'W':

case'w':

System.out.println("星期三");

break;

case'F':

case'f':

System.out.println("星期五");

break;

default:

System.out.println("输入错误!");

break;

}

}

【程序27】

题目:求100之内的素数

public static void main(String[]args)throws Exception

{

int i,j,count=0;

for(i=2;i<100;i++)

{

for(j=2;j<(int)(Math.sqrt(i)+1);j++)

{

if(i%j==0)

{

break;

}

}

if(j>(int)Math.sqrt(i))

{

System.out.println(i);

count++;

}

}

System.out.println("100内共有"+count+"个素数!");

}

【程序28】

题目:对10个数进行排序

1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。

public static void main(String[]args)

{

Scanner sc=new Scanner(System.in);

int[]a=new int[10];

int i,j,temp;

System.out.println("输入10个数:");

for(i=0;i<10;i++)//输入10个数

{

a[i]=sc.nextInt();

}

for(i=0;i<10-1;i++)//由小到大排序

{

for(j=i+1;j<10;j++)

{

if(a[i]>a[j])

{

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

}

System.out.println("由小到大排序后顺序为:");

for(i=0;i<10;i++)

{

System.out.print(a[i]+"");

}

}

【程序29】

题目:求一个3*3矩阵对角线元素之和

1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。public static void main(String[]args)

{

int[][]a={{1,2,3,},{4,5,6,},{7,8,9}};

int sum=0;

for(int i=0;i<3;i++)

{

for(int j=0;j<3;j++)

{

if(i==j)

{

sum=sum+a[i][j];

}

}

}

System.out.println(sum);

}

【程序30】

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

1.程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

【程序31】

题目:将一个数组逆序输出。

1.程序分析:用第一个与最后一个交换。

Scanner sc=new Scanner(System.in);

System.out.println("元素个数:");

int n=sc.nextInt();

int[]a=new int[n];

int i,j;

for(i=0;i

{

System.out.print("输入第"+(i+1)+"个数:");

a[i]=sc.nextInt();

}

for(i=0;i<(a.length+1)/2;i++)

{

int t=a[n-1-i];

a[n-1-i]=a[i];

a[i]=t;

}

System.out.println("逆序输出数组为:");

for(i=0;i

{

System.out.print(a[i]+"");

}

【程序38】

题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。public class A2

{

String str;

public A2(String str)

{

this.str=str;

}

public void strLength()

{

System.out.println("该字符串为:"+str);

System.out.println("其长度为:"+str.length());

}

public static void main(String[]args)

{

A2a=new A2("f4dsf f)a*fd");

a.strLength();

}

}

【程序39】

题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)

public static void main(String[]args)

{

Scanner sc=new Scanner(System.in);

System.out.println("输入一个整数:");

int n=sc.nextInt();

double sum=0;

int i;

String str="";

if(n%2==0)//n为偶数

{

for(i=1;i<=n/2;i++)

{

sum=sum+((double)1/(double)(2*i));

}

System.out.println(sum);

}

else//n为奇数

{

for(i=1;i<=(n+1)/2;i++)

{

sum=sum+((double)1/(double)(i*2-1));

}

System.out.println(sum);

}

}

【程序43】

题目:求0—7所能组成的奇数个数。

【程序44】

题目:一个偶数总能表示为两个素数之和。

【程序47】

题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。public static void main(String[]args)throws Exception

{

Random r=new Random();

int n;

int i;

for(i=0;i<7;i++)

{

int j;

n=r.nextInt(50)+1;

System.out.print("第"+(i+1)+"个随机数是:"+n+"");

for(j=1;j<=n;j++)

{

System.out.print("*");

}

System.out.println();

}

}

【程序48】

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

public static void main(String[]args)

{

Scanner sc=new Scanner(System.in);

System.out.println("请输入一个四位的整数:");

int n=sc.nextInt();

int a=(n/1000+5)%10;

int b=(n/100%10+5)%10;

int c=(n/10%10+5)%10;

int d=(n%10+5)%10;

System.out.println(""+d+c+b+a);

}

Java经典编程题50道

【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下 的用C表示。 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析:利用while语句,条件为输入的字符不为'\n'. 【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加), 几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 【程序9】

50道经典java编程题

【程序1】TestRabbit.java 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 【程序2】FindPrimeNumber.java 题目:判断101-200之间有多少个素数,并输出所有素数。 【程序3】FindDaffodilNumber.java 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 【程序4】FenJie.java 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 【程序5】ConditionOperator.java 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

【程序6】GcdTest.java辗转相除法 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 【程序7】StChar.java 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 【程序8】TestAdd.java 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 【程序9】WanShu.java 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。 【程序10】TestBall.java 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

JAVA试题集锦(含答案)

JAVA习题锦集(含答案) 一、判断题 1.(×)接口和类一样也可以有继承关系,而且都只能支持单继承 2.(√)可以用FileOutputStream对象作为PrintWrite类的构造方法的参数 3.(×)A subclass inherits all methods ( including the constructor ) from the superclass 4.(×)Java中所有的类都是https://www.wendangku.net/doc/4016424838.html,ng的子类 5.(×)由于URL对象对应的Internet地址可以划分为“协议名”、“端口号”和“文件名”3部分,所以创建一个URL对象后,可以通过修改这3部分内容来修改这个URL对象的Internet地址 6.(×)abstract方法不一定要声明在abstract类中 7.(×)在Java中,异常(Exception)是指程序在编译和运行进出现的错误 8.(√)我们可以方便地编写Java客户机/服务器程序,在客户机/服务器模式中,客户机一般通过套接字(Socket)使用服务器所提供的服务,Socket由两部分组成:IP地址和端口号 9.(√)子类的域和方法的数目一定大于等于父类的域和方法的数目 10.(×)最终方法只能存在于最终类中 二、单选题 1、Java语言具有许多优点和特点,下列选项中,哪个反映了Java程序并行机制的特点?B (A)安全性(B)多线性(C)跨平台(D)可移植 2、下列选项中不是JAVA语言特点的是()D (A)面向对象(B)平台无关(C)安全性高(D)单线程 3、异常包含下列那些内容?()D (A)程序中的语法错误(B)程序的编译错误 (C)程序执行过程中遇到的事先没有预料到的情况 (D)程序事先定义好的可能出现的意外情况 4、JAVA语言中的语句是以()为结尾的。B

java50道经典逻辑题

題目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 【程序1】 題目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:咋一看不知道如何下手,但是你在草稿纸上写写分析一下,就很快发现其中的规律了package logic; import java.util.Scanner; public class RabbitNum { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("你想知道前几个月的兔子的数量"); int month = in.nextInt(); int[] mon = new int[month]; if(month < 3){ System.out.println("第" + month + "个月有1 对兔子,共2 只"); } else for(int i = 2; i < month; i++){ mon[0] = mon[1] = 1; mon[i] = mon[i - 1] + mon[i - 2]; System.out.printf("第%d 个月有%d 对兔子,共%d 只兔子\n", i + 1, mon[i], 2 * mon[i]); } } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 分析:如果知道素数是什么,该题就应该不难了 package logic; public class Prime { public static void main(String[] args) { System.out.print("101--200中的素数有:"); for(int i = 101; i <= 200; i++){ if(isPrime(i)) System.out.print(" " + i); } } //isPrime方法用来判断一个数是否是素数private static boolean isPrime(int i) { // TODO Auto-generated method stub for(int j = 2; j <= Math.sqrt(i); j++){ if(i % j == 0) return false; } return true; } } 【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 分析:解决这个题目主要要知道怎么把一个数的各个位上的数拆分出来 package logic; import java.util.Scanner; public class NarcissisticNum { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("水仙花数有:"); for(int num = 100; num < 1000; num++){ if(isNarcissisticNum(num)) System.out.println(" " + num); } } //一个判断正整数是否为水仙花数的方法private static boolean isNarcissisticNum(int num) { // TODO Auto-generated method stub int a = num / 100; //分离出百位a int b = (num / 10) % 10; //分离出十位b int c = num % 10; //分离出个位 c int sum = a * a * a + b * b * b + c * c * c; if(sum == num) return true; else return false; } } 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 分析:按步骤实现就可以了(有多种实现方式,以下代码供参考。我也参考了别人的)package logic; import java.util.Scanner; public class PrimeFactorOfInteger { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个

JAVA经典算法40题

JAVA经典算法40题 【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... public class exp2{ public static void main(String args[]){ int i=0; for(i=1;i<=20;i++) System.out.println(f(i)); } public static int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } } 或 public class exp2{ public static void main(String args[]){ int i=0; math mymath = new math(); for(i=1;i<=20;i++) System.out.println(mymath.f(i)); } } class math { public int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } } 【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class exp2{ public static void main(String args[]){ int i=0; math mymath = new math(); for(i=2;i<=200;i++)

Java基础编程练习题(50题及答案)2017

2017年Java基础编程经典练习题50道 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println("第1个月的兔子对数: 1"); System.out.println("第2个月的兔子对数: 1"); int f1 = 1, f2 = 1, f, M=24; for(int i=3; i<=M; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.println("第" + i +"个月的兔子对数: "+f2); } } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 public class lianxi02 { public static void main(String[] args) { int count = 0; for(int i=101; i<200; i+=2) { boolean b = false; for(int j=2; j<=Math.sqrt(i); j++) { if(i % j == 0) { b = false; break; } else { b = true; } } if(b == true) {count ++;System.out.println(i );} } System.out.println( "素数个数是: " + count); } } 【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 public class lianxi03 {

java经典选择题100例及答案

1.使用Java语言编写的源程序保存时的文件扩展名是()。 (A).class (B).java (C).cpp (D).txt 2.设int a=-2,则表达式a>>>3的值为()。 (A)0 (B)3 (C)8 (D)-1 3.设有数组的定义int[] a = new int[3],则下面对数组元素的引用错误的是()。 (A)a[0]; (B)a[a.length-1]; (C)a[3]; (D)int i=1;a[i]; 4.在类的定义中可以有两个同名函数,这种现象称为函数()。 (A)封装(B)继承 (C)覆盖(D)重载 5.在类的定义中构造函数的作用是()。 (A)保护成员变量(B)读取类的成员变量 (C)描述类的特征(D)初始化成员变量 6.下面关键字中,哪一个不是用于异常处理语句()。 (A)try (B)break (C)catch (D)finally 7.类与对象的关系是()。 (A)类是对象的抽象(B)对象是类的抽象 (C)对象是类的子类(D)类是对象的具体实例 8.下面哪一个是Java中不合法的标识符()。 (A)$persons (B)twoNum (C)_myVar (D)*point 9.为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( )。 (A)static void method( ) (B)public void method( ) (C)final void method( ) (D)abstract void method( ) 10.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的()。 (A)ArrayList myList=new Object( ) (B)List myList=new ArrayList( ) (C)ArrayList myList=new List( ) (D)List myList=new List( ) 11.Java源文件和编译后的文件扩展名分别为() (A) .class和.java(B).java和.class (C).class和.class(D) .java和.java 12.在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的( )方法来完成一些画图操作。 (A) start( ) (B) stop( ) (C) init( ) (D) paint( ) 13.对于一个Java源文件,import, class定义以及package正确的顺序是: (A) package,import,class(B) class,import,package (C) import,package,class(D) package,class,import 14.下面哪个是非法的: (A) int I = 32;(B) float f = 45.0; (C) double d = 45.0;(D) char c = ‘u’;//符号错 15.Java语言使用的字符码集是 (A) ASCII (B) BCD (C) DCB (D) Unicode 16. 如果一个类的成员变量只能在所在类中使用,则该成员变量必须使用的修饰是 (A) public (B) protected (C) private (D) static 17.下面关于main方法说明正确的是 (A) public main(String args[ ]) (B) public static void main(String args[ ]) (C) private static void main(String args[ ]) (D) void main() 18.哪个关键字可以对对象加互斥锁?( ) (A) transient (B) synchronized (C) serialize (D) static 19.关于抽象方法的说法正确的是( ) (A)可以有方法体(B) 可以出现在非抽象类中 (C) 是没有方法体的方法(D) 抽象类中的方法都是抽象方法 20.java.io包的File类是 (A)字符流类(B) 字节流类 (C) 对象流类(D) 非流类 21.Java application中的主类需包含main方法,以下哪项是main方法的正确形参?() A、String args B、String args[] C、Char arg D、StringBuffer args[] 22.以下代码段执行后的输出结果为()A、-1 B、2 C、1 D、3 23.以下关于继承的叙述正确的是()。 A、在Java中类只允许单一继承 B、在Java中一个类只能实现一个接口 C、在Java中一个类不能同时继承一个类和实现一个接口 D、在Java中接口只允许单一继承 24. 若有定义:byte[] x={11,22,33,-66}; 其中0≤k≤3,则对x数组元素错误的引用是() A)x[5-3] B)x[k] C)x[k+5] D)x[0] 25.paint()方法使用哪种类型的参数? () A、Graphics B、Graphics2D C、String D、Color 26.以下哪个不是Java的原始数据类型() A、int B、Boolean C、float D、char 27.在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数的个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序特性称为() A)隐藏 B)重写 C)重载 D)Java不支持此特性 28.以下有关构造方法的说法,正确的是:() A.一个类的构造方法可以有多个 B.构造方法在类定义时被调用 C.构造方法只能由对象中的其它方法调用。 D.构造方法可以和类同名,也可以和类名不同 29.在浏览器中执行applet 程序,以下选项中的哪个方法将被最先执行()。 A、init() B、start() C、destroy() D、stop() 30.给出下面代码,关于该程序以下哪个说法是正确的?()public class Person{ static int arr[] = new int[5]; public static void main(String a[]) { System.out.println(arr[0]);} } A、编译时将产生错误 B、编译时正确,运行时将产生错误 C、输出零 D、输出空 31、有以下方法的定义,请选择该方法的返回类型()。ReturnType method(byte x, double y) { return (short)x/y*2; } A、byte B、short C、int D、double 32.下列类定义中哪些是合法的抽象类的定义?() A、abstract Animal{abstract void growl();} B、class abstract Animal{abstract void growl();} C、abstract class Animal{abstract void growl();} D、abstract class Animal{abstract void growl(){System.out.println(“growl”);};} 33.有以下程序片段,下列哪个选项不能插入到行1。() 1. 2.public class Interesting{ 3.//do sth 4. } A、import java.awt.*; B、package mypackage; C、class OtherClass{ } D、public class MyClass{ } 34. 设有下面两个赋值语句: a = Integer.parseInt(“12”); b = Integer.valueOf(“12”).intValue(); 下述说法正确的是()。 A、a是整数类型变量,b是整数类对象。 B、a是整数类对象,b是整数类型变量。 C、a和b都是整数类对象并且值相等。 D、a和b都是整数类型变量并且值相等。 35.在编写Java Applet程序时,需在程序的开头写上( )语句。 A、import java.awt.* ; B、import java.applet.Applet ; C、import java.io.* ; D、import java.awt.Graphics ; 36.下列哪一项不属于Swing的顶层容器?()

java经典算法50题答案

1 package work; public class Fib { public static void main(String[] args){ int[] fib = new int[23]; fib[0] = 1; fib[1] = 1; for(int i = 2; i < fib.length; i++){ fib[i] = fib[i - 1] + fib[i - 2]; } for(int i = 0; i < fib.length; i++){ System.out.print(fib[i]+" "); } } } 2 package work; import java.math.*; import java.util.ArrayList; public class Sushu { public static void main(String[] args){ ArrayList list = new ArrayList(); for(int i = 101; i < 200; i++){ if(isPrime(i)){ list.add(i); } } System.out.println(list + "共有" +list.size()); } public static boolean isPrime(int i){ boolean flag = true; for(int j = 2; j < Math.sqrt(i); j++){ if(i % j == 0){ flag = false; } } return flag; } } 3

package work; public class Flower { public static void main(String[] args){ for(int i = 100; i <999; i++){ if(flower(i)){ System.out.print(i +" "); } } } public static boolean flower(int number){ boolean flag = false; int i = number / 100; // int j = (number - i*100) / 10; int k = number % 10; if((i*i*i + j*j*j + k*k*k) == number){ flag = true; } return flag; } } 4 package work; import java.util.Scanner; import java.io.*; public class Decomposition { private static int k = 2; public static void main(String[] args)throws IOException{ Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数"); int number = scanner.nextInt(); System.out.print(number + "="); fenJie(number); } public static void fenJie(int number){ if(k == number){ System.out.print(k); return; }

java笔试题以及答案详解

java笔试题以及答案详解一 一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名 C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 详解:见下面代码,很明显方法是可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值。

4.提供Java存取数据库能力的包是() A.java.sql B.java.awt C.https://www.wendangku.net/doc/4016424838.html,ng D.java.swing 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 详解: 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1;

}while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环 答案:C 详解: 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{ }包住C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 详解: 8.下列语句正确的是() A.形式参数可被视为local variable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 答案:A 详解:

java经典100例算法题

C语言经典100例 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main()

long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); } ============================================================== 【程序3】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开

JAVA经典算法面试10题及答案

JAVA经典算法面试10题及答案 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21 . public class exp2{ public static void main(string args[]){ int i=0; for(i=1;i i++) system.out.println(f(i)); } public static int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); }}或public class exp2{ public static void main(string args[]){ int i=0; math mymath = new math(); for(i=1;i i++) system.out.println(mymath.f(i)); }}class math{ public int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); }}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class exp2{ public static void main(string args[]){ int i=0; math mymath = new math(); for(i=2;i =200;i++) if(mymath.iszhishu(i)==true) system.out.println(i); }}class math{ public int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } public boolean iszhishu(int x) { for(int i=2;i =x/2;i++) if (x % 2==0 ) return false; return true; }}【程序3】题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其

精选30道Java试题

精选30道Java试题 1. 下面哪些是Thread类的方法() A start() B run() C exit() D getPriority() 答案:ABD 解析:看Java API docs吧:,exit()是System类的方法,如System.exit(0)。 2. 下面关于https://www.wendangku.net/doc/4016424838.html,ng.Exception类的说法正确的是() A 继承自Throwable B Serialable CD 不记得,反正不正确 答案:A 解析:Java异常的基类为https://www.wendangku.net/doc/4016424838.html,ng.Throwable,https://www.wendangku.net/doc/4016424838.html,ng.Error和https://www.wendangku.net/doc/4016424838.html,ng.Excepti on继承Throwable,RuntimeException和其它的Exception等继承Exception,具体的RuntimeException继承RuntimeException。 扩展:错误和异常的区别(Error vs Exception) 1) https://www.wendangku.net/doc/4016424838.html,ng.Error: Throwable的子类,用于标记严重错误。合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。https://www.wendangku.net/doc/4016424838.html,ng.Exception: Throwable的子类,用于指示一种合理的程序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,并且鼓励用户程序去catch它。

2) Error和RuntimeException 及其子类都是未检查的异常(unchecked except ions),而所有其他的Exception类都是检查了的异常(checked exceptions). checked exceptions:通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复。比如, ParseException等。检查了的异常发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。 unchecked exceptions:通常是如果一切正常的话本不该发生的异常,但是的确发生了。发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的。比如ArrayI ndexOutOfBoundException, ClassCastException等。从语言本身的角度讲,程序不该去catch这类异常,虽然能够从诸如RuntimeException这样的异常中catch并恢复,但是并不鼓励终端程序员这么做,因为完全没要必要。因为这类错误本身就是bug,应该被修复,出现此类错误时程序就应该立即停止执行。因此,面对Errors和uncheck ed exceptions应该让程序自动终止执行,程序员不该做诸如try/catch这样的事情,而是应该查明原因,修改代码逻辑。 RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。 处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。其他(IOException等等)checked异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。 3. 下面程序的运行结果是()

JAVA编程题全集(50题及答案)

【程序1】?题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月得兔子总数为多少? //这就是一个菲波拉契数列问题?publicclass lianxi01 {?publicstaticvoid main(Str ing[]args) { System、out、println("第1个月得兔子对数:1”); System、out、println("第2个月得兔子对数:1");?intf1= 1, f2=1, f,M=24;?for(int i=3; i〈=M;i++){ f=f2; f2= f1+ f2;?f1 = f; System、out、println(”第" +i +"个月得兔子对数:”+f2); }?} } 【程序2】?题目:判断101-200之间有多少个素数,并输出所有素数. 程序分析:判断素数得方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不就是素数,反之就是素数。 public class lianxi02 { public static void main(String[]args){ int count = 0; for(inti=101; i〈200;i+=2){ boolean b=false; for(int j=2; j〈=Math、sqrt(i);j++) { if(i%j ==0){ b = false;break;}?else { b =tr ue;} } if(b== true) {count ++;System、out、println(i );} } System、out、println( "素数个数就是:"+count); }?} 【程序3】 题目:打印出所有得"水仙花数”,所谓"水仙花数”就是指一个三位数,其各位数字立方与等于该数本身。例如:153就是一个"水仙花数”,因为153=1得三次方+5得三次方+3得三次方。 publicclasslianxi03 {?public staticvoidmain(String[] args) {int b1,b2,b3;?for(int m=101;m<1000;m++){ b3 =m /100;?b2=m%100/10;?b1 =m%10;?if((b3*b3*b3+b2*b2*b2 + b1*b1*b1) == m){?System、out、pr intln(m+"就是一个水仙花数”);}?} }?} 【程序4】 题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小得质数k,然后按下述步骤完成:?(1)如果这个质数恰等于n,则说明分解质因数得过程已经结束,打印出即可. ?(2)如果n <〉

java经典算法40(初学必做基础)

java经典算法40题(21-40) 【程序21】题目:求1+2!+3!+...+20!的和1.程序分析:此程序只是把累加变成了累乘。public class Ex21 { static long sum = 0; static long fac = 0; public static void main(String[] args) { long sum = 0; long fac = 1; for(int i=1; i<=10; i++) { fac = fac * i; sum += fac; } System.out.println(sum); } } 【程序22】题目:利用递归方法求5!。 1.程序分析:递归公式:fn=fn_1*4! import java.util.Scanner; public class Ex22 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt();

Ex22 tfr = new Ex22(); System.out.println(tfr.recursion(n)); } public long recursion(int n) { long value = 0 ; if(n ==1 || n == 0) { value = 1; } else if(n > 1) { value = n * recursion(n-1); } return value; } } 【程序23】题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。 public class Ex23 { static intgetAge(int n){ if (n==1){ return 10; } return 2 + getAge(n-1); }

相关文档
相关文档 最新文档