java经典100例算法题

java经典100例算法题
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后再开方,如果开

的结果满足如下条件,即是结果。请看具体分析:

2.程序源代码:

#include "math.h"

main()

{

long int i,x,y,z;

for (i=1;i<100000;i++)

{ x=sqrt(i+100); /*x为加上100后开方后的结果*/

y=sqrt(i+268); /*y为再加上168后开方后的结果*/

if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/

printf("\n%ld\n",i);

}

}

==============================================================

【程序4】

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

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

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

2.程序源代码:

main()

{

int day,month,year,sum,leap;

printf("\nplease input year,month,day\n");

scanf("%d,%d,%d",&year,&month,&day);

switch(month)/*先计算某月以前月份的总天数*/

{

case 1:sum=0;break;

case 2:sum=31;break;

case 3:sum=59;break;

case 4:sum=90;break;

case 5:sum=120;break;

case 6:sum=151;break;

case 7:sum=181;break;

case 8:sum=212;break;

case 9:sum=243;break;

case 10:sum=273;break;

case 11:sum=304;break;

case 12:sum=334;break;

default:printf("data error");break;

}

sum=sum+day; /*再加上某天的天数*/

if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/

leap=1;

else

leap=0;

if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/

sum++;

printf("It is the %dth day.",sum);}

==============================================================

【程序5】

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

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

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

2.程序源代码:

main()

{

int x,y,z,t;

scanf("%d%d%d",&x,&y,&z);

if (x>y)

{t=x;x=y;y=t;} /*交换x,y的值*/

if(x>z)

{t=z;z=x;x=t;}/*交换x,z的值*/

if(y>z)

{t=y;y=z;z=t;}/*交换z,y的值*/

printf("small to big: %d %d %d\n",x,y,z);

}

============================================================== 【程序6】

题目:用*号输出字母C的图案。

1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。

2.程序源代码:

#include "stdio.h"

main()

{

printf("Hello C-world!\n");

printf(" ****\n");

printf(" *\n");

printf(" * \n");

printf(" ****\n");

}

==============================================================

【程序7】

题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!

1.程序分析:字符共有256个。不同字符,图形不一样。

2.程序源代码:

#include "stdio.h"

main()

{

char a=176,b=219;

printf("%c%c%c%c%c\n",b,a,a,a,b);

printf("%c%c%c%c%c\n",a,b,a,b,a);

printf("%c%c%c%c%c\n",a,a,b,a,a);

printf("%c%c%c%c%c\n",a,b,a,b,a);

printf("%c%c%c%c%c\n",b,a,a,a,b);}

============================================================== 【程序8】

题目:输出9*9口诀。

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

2.程序源代码:

#include "stdio.h"

main()

{

int i,j,result;

printf("\n");

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

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

{

result=i*j;

printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/

}

printf("\n");/*每一行后换行*/

}

}

==============================================================

【程序9】

题目:要求输出国际象棋棋盘。

1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。

2.程序源代码:

#include "stdio.h"

main()

{

int i,j;

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

{

for(j=0;j<8;j++)

if((i+j)%2==0)

printf("%c%c",219,219);

else

printf(" ");

printf("\n");

}

}

【程序10】

题目:打印楼梯,同时在楼梯上方打印两个笑脸。

1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。

2.程序源代码:

#include "stdio.h"

main()

{

int i,j;

printf("\1\1\n");/*输出两个笑脸*/

for(i=1;i<11;i++)

{

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

printf("%c%c",219,219);

printf("\n");

}

}

【程序11】

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

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

2.程序源代码:

main()

{

long f1,f2;

int i;

f1=f2=1;

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

{ printf("%12ld %12ld",f1,f2);

if(i%2==0) printf("\n");/*控制输出,每行四个*/

f1=f1+f2; /*前两个月加起来赋值给第三个月*/

f2=f1+f2; /*前两个月加起来赋值给第三个月*/

}

}

==============================================================

【程序12】

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

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

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

2.程序源代码:

#include "math.h"

main()

{

int m,i,k,h=0,leap=1;

printf("\n");

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

{ k=sqrt(m+1);

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

if(m%i==0)

{leap=0;break;}

if(leap) {printf("%-4d",m);h++;

if(h%10==0)

printf("\n");

}

leap=1;

}

printf("\nThe total is %d",h);

}

==============================================================

【程序13】

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

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

2.程序源代码:

main()

{

int i,j,k,n;

printf("'water flower'number is:");

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

{

i=n/100;/*分解出百位*/

j=n/10%10;/*分解出十位*/

k=n%10;/*分解出个位*/

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

{

printf("%-5d",n);

}

}

printf("\n");

}

==============================================================

【程序14】

题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。

2.程序源代码:

/* zheng int i s divided yinshu*/

main()

{

int n,i;

printf("\nplease input a number:\n");

scanf("%d",&n);

printf("%d=",n);

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

{

while(n!=i)

{

if(n%i==0)

{ printf("%d*",i);

n=n/i;

}

el se

break;

}

}

printf("%d",n);}

==============================================================

【程序15】

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

60分以下的用C表示。

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

2.程序源代码:

main()

{

int score;

char grade;

printf("please input a score\n");

scanf("%d",&score);

grade=score>=90?'A':(score>=60?'B':'C');

printf("%d belongs to %c",score,grade);

}

==============================================================

【程序16】

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

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

2.程序源代码:

main()

{

int a,b,num1,num2,temp;

printf("please input two numbers:\n");

scanf("%d,%d",&num1,&num2);

if(num1

{ temp=num1;

num1=num2;

num2=temp;

}

a=num1;b=num2;

while(b!=0)/*利用辗除法,直到b为0为止*/

{

temp=a%b;

a=b;

b=temp;

}

printf("gongyueshu:%d\n",a);

printf("gongbei shu:%d\n",num1*num2/a);

}

==============================================================

【程序17】

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

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

2.程序源代码:

#include "stdio.h"

main()

{char c;

int letters=0,space=0,digit=0,others=0;

printf("please input some characters\n");

while((c=getchar())!='\n')

{

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

letters++;

el se if(c==' ')

space++;

el se if(c>='0'&&c<='9')

digit++;

el se

others++;

}

printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,

space,digit,others);

}

==============================================================

【程序18】

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

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

2.程序源代码:

main()

{

int a,n,count=1;

long int sn=0,tn=0;

printf("please input a and n\n");

scanf("%d,%d",&a,&n);

printf("a=%d,n=%d\n",a,n);

while(count<=n)

{

tn=tn+a;

sn=sn+tn;

a=a*10;

++count;

}

printf("a+aa+...=%ld\n",sn);

}

==============================================================

【程序19】

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

1. 程序分析:请参照程序<--上页程序14.

2.程序源代码:

main()

{

static int k[10];

int i,j,n,s;

for(j=2;j<1000;j++)

{

n=-1;

s=j;

for(i=1;i

{

if((j%i)==0)

{n++;

s=s-i;

k[n]=i;

}

}

if(s==0)

{

printf("%d i s a wanshu",j);

for(i=0;i

printf("%d,",k);

printf("%d\n",k[n]);

}

}

}

============================================================== 【程序20】

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

1.程序分析:见下面注释

2.程序源代码:

main()

{

float sn=100.0,hn=sn/2;

int n;

for(n=2;n<=10;n++)

{

sn=sn+2*hn;/*第n次落地时共经过的米数*/

hn=hn/2; /*第n次反跳高度*/

}

printf("the total of road is %f\n",sn);

printf("the tenth is %f meter\n",hn);

}

【程序21】

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

1.程序分析:采取逆向思维的方法,从后往前推断。

2.程序源代码:

main()

{

int day,x1,x2;

day=9;

x2=1;

while(day>0)

{x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/

x2=x1;

day--;

}

printf("the total is %d\n",x1);

}

==============================================================

【程序22】

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

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

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

2.程序源代码:

main()

{

char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/

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

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

{

if(i!=j)

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

{ if(i!=k&&j!=k)

{ if(i!='x'&&k!='x'&&k!='z')

printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);

}

}

}

}

==============================================================

【程序23】

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

*

***

******

********

******

***

*

1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重

for循环,第一层控制行,第二层控制列。

2.程序源代码:

main()

{

int i,j,k;

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

{

for(j=0;j<=2-i;j++)

printf(" ");

for(k=0;k<=2*i;k++)

printf("*");

printf("\n");

}

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

{

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

printf(" ");

for(k=0;k<=4-2*i;k++)

printf("*");

printf("\n");

}

}

==============================================================

【程序24】

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

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

2.程序源代码:

main()

{

int n,t,number=20;

float a=2,b=1,s=0;

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

{

s=s+a/b;

t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/

}

printf("sum is %9.6f\n",s);

}

==============================================================

【程序25】

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

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

2.程序源代码:

main()

{

float n,s=0,t=1;

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

{

t*=n;

s+=t;

}

printf("1+2!+3!...+20!=%e\n",s);

}

==============================================================

【程序26】

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

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

2.程序源代码:

#include "stdio.h"

main()

{

int i;

int fact();

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

printf("\40:%d!=%d\n",i,fact(i));

}

int fact(j)

int j;

{

int sum;

if(j==0)

sum=1;

else

sum=j*fact(j-1);

return sum;

}

============================================================== 【程序27】

题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

1.程序分析:

2.程序源代码:

#include "stdio.h"

main()

{

int i=5;

void palin(int n);

printf("\40:");

palin(i);

printf("\n");

}

void palin(n)

int n;

{

char next;

if(n<=1)

{

next=getchar();

printf("\n\0:");

putchar(next);

}

else

{

next=getchar();

palin(n-1);

putchar(next);

}

}

==============================================================

【程序28】

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

1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道

第四人的岁数,依次类推,推到第一人(10岁),再往回推。

2.程序源代码:

age(n)

int n;

{

int c;

if(n==1) c=10;

else c=age(n-1)+2;

return(c);

}

main()

{ printf("%d",age(5));

}

==============================================================

【程序29】

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供)

2.程序源代码:

main( )

{

long a,b,c,d,e,x;

scanf("%ld",&x);

a=x/10000;/*分解出万位*/

b=x%10000/1000;/*分解出千位*/

c=x%1000/100;/*分解出百位*/

d=x%100/10;/*分解出十位*/

e=x%10;/*分解出个位*/

if (a!=0) printf("there are 5, %ld %ld %ld %l d %ld\n",e,d,c,b,a);

else if (b!=0) printf("there are 4, %ld %ld %l d %ld\n",e,d,c,b);

el se if (c!=0) printf(" there are 3,%ld %l d %ld\n",e,d,c);

el se if (d!=0) printf("there are 2, %ld %ld\n",e,d);

el se if (e!=0) printf(" there are 1,%ld\n",e);

}

==============================================================

【程序30】

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

1.程序分析:同29例

2.程序源代码:

main( )

{

long ge,shi,qian,wan,x;

scanf("%ld",&x);

wan=x/10000;

qian=x%10000/1000;

shi=x%100/10;

ge=x%10;

if (ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/

printf("thi s number is a huiwen\n");

else

printf("thi s number is not a huiwen\n");

}

【程序31】

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

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

2.程序源代码:

#include

void main()

{

char letter;

printf("please input the first letter of someday\n");

while ((letter=getch())!='Y')/*当所按字母为Y时才结束*/

{ switch (letter)

{case 'S':printf("please input second letter\n");

if((letter=getch())=='a')

printf("saturday\n");

el se if ((letter=getch())=='u')

printf("sunday\n");

el se printf("data error\n");

break;

case 'F':printf("friday\n");break;

case 'M':printf("monday\n");break;

case 'T':printf("please input second letter\n");

if((letter=getch())=='u')

printf("tuesday\n");

el se if ((letter=getch())=='h')

printf("thursday\n");

el se printf("data error\n");

break;

case 'W':printf("wednesday\n");break;

default: printf("data error\n");

}

}

}

============================================================== 【程序32】

题目:Press any key to change color, do you want to try it. Please hurry up!

1.程序分析:

2.程序源代码:

#include

void main(void)

{

int col or;

for (color = 0; color < 8; color++)

{

textbackground(color);/*设置文本的背景颜色*/

cprintf("Thi s is color %d\r\n", color);

cprintf("Press any key to continue\r\n");

getch();/*输入字符看不见*/

}

}

============================================================== 【程序33】

题目:学习gotoxy()与clrscr()函数

1.程序分析:

2.程序源代码:

#include

void main(void)

{

clrscr();/*清屏函数*/

textbackground(2);

gotoxy(1, 5);/*定位函数*/

cprintf("Output at row 5 column 1\n");

textbackground(3);

gotoxy(20, 10);

cprintf("Output at row 10 column 20\n");

}

============================================================== 【程序34】

题目:练习函数调用

1. 程序分析:

2.程序源代码:

#include

void hello_world(void)

{

printf("Hello, world!\n");

}

void three_hellos(voi d)

{

int counter;

for (counter = 1; counter <= 3; counter++)

hello_world();/*调用此函数*/

}

void main(void)

{

three_hellos();/*调用此函数*/

}

============================================================== 【程序35】

题目:文本颜色设置

1.程序分析:

2.程序源代码:

#include

void main(void)

{

int col or;

for (color = 1; color < 16; col or++)

{

textcolor(col or);/*设置文本颜色*/

cprintf("Thi s is color %d\r\n", color);

}

textcolor(128 + 15);

cprintf("This i s blinking\r\n");

}

============================================================== 【程序36】

题目:求100之内的素数

1.程序分析:

2.程序源代码:

#include

#include "math.h"

#define N 101

main()

{

int i,j,line,a[N];

for(i=2;ik,但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.360docs.net/doc/5e6808224.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.360docs.net/doc/5e6808224.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.360docs.net/doc/5e6808224.html,ng.Exception类的说法正确的是() A 继承自Throwable B Serialable CD 不记得,反正不正确 答案:A 解析:Java异常的基类为https://www.360docs.net/doc/5e6808224.html,ng.Throwable,https://www.360docs.net/doc/5e6808224.html,ng.Error和https://www.360docs.net/doc/5e6808224.html,ng.Excepti on继承Throwable,RuntimeException和其它的Exception等继承Exception,具体的RuntimeException继承RuntimeException。 扩展:错误和异常的区别(Error vs Exception) 1) https://www.360docs.net/doc/5e6808224.html,ng.Error: Throwable的子类,用于标记严重错误。合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。https://www.360docs.net/doc/5e6808224.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); }

相关主题
相关文档
最新文档