java算法练习_25道经典Java算法题

586139c82dee

即使做web开发,也会遇到各种各种需要解决的算法问题,本文节选部分经典练手算法,并提供相关参考答案,希望对你有所帮助

【程序1】

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

//这是一个菲波拉契数列问题

publicclasstest01{

publicstaticvoidmain(String[] args){

intf1=1,f2=1,f;

intM=30;

System.out.println(1);

System.out.println(2);

for(inti=3;i

f=f2;

f2=f1+f2;

f1=f;

System.out.println(f2);

}

}

}

【程序2】

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

程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

publicclasstest02{

publicstaticvoidmain(String[] args){

intcount=0;

for(inti=101;i<200;i+=2) {

boolean flag=true;

for(intj=2;j<=Math.sqrt(i);j++) {

if(i%j==0) {

flag=false;

break;

}

}

if(flag==true) {

count++;

System.out.println(i);

}

}

System.out.println(count);

}

}

【程序3】

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

publicclasstest03{

publicstaticvoidmain(String[] args){

inta,b,c;

for(inti=101;i<1000;i++) {

a=i%10;

b=i/10%10;

c=i/100;

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

System.out.println(i);

}

}

}

【程序4】

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

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

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

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

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

import java.util.Scanner;

publicclasstest04{

publicstaticvoidmain(String[] args){

Scanner input=newScanner(System.in);

intn=input.nextInt();

intk=2;

while(n>=k) {

if(n==k) {

System.out.println(k);

break;

}elseif(n%k==0) {

System.out.println(k);

n=n/k;

}else{

k++;

}

}

}

}

【程序5】

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

import java.util.Scanner;publicclasstest05{

publicstaticvoidmain(String[] args){

Scanner input=newScanner(System.in);

intscore=input.nextInt();

chargrade=score>=90?'A':score>=60?'B':'C';

System.out.println(grade);

}

}

【程序6】

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。   /*在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。/

import java.util.Scanner;publicclasstest06{

publicstaticvoidmain(String[] args){

Scanner input =newScanner(System.in);

inta=input.nextInt();

intb=input.nextInt();

test06 test=newtest06();

inti = test.gongyinshu(a, b);

System.out.println("最小公因数"+i);

System.out.println("最大公倍数"+a*b/i);

}

publicintgongyinshu(inta,intb){

if(a

intt=b;

b=a;

a=t;

}

while(b!=0) {

if(a==b)

returna;

intx=b;

b=a%b;

a=x;

}

returna;

}

}

【程序7】

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

import java.util.Scanner;

publicclasstest07{

publicstaticvoidmain(String[] args){

intabccount=0;

intspacecount=0;

intnumcount=0;

intothercount=0;

Scanner input=newScanner(System.in);

String toString=input.nextLine();

char[] ch=toString.toCharArray();

for(inti=0;i

if(Character.isLetter(ch[i])) {

abccount++;

}elseif(Character.isDigit(ch[i])) {

numcount++;

}elseif(Character.isSpaceChar(ch[i])){

spacecount++;

}else{

othercount++;

}

}

System.out.println(abccount);

System.out.println(spacecount);

System.out.println(numcount);

System.out.println(othercount);

}

}

【程序8】

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

import java.util.Scanner;

publicclasstest08{

publicstaticvoidmain(String[] args){

Scanner input=newScanner(System.in);

inta=input.nextInt();

intn=input.nextInt();

intsum=0,b=0;

for(inti=0;i

b+=a;

sum+=b;

a=a*10;

}

System.out.println(sum);

}

}

【程序9】

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

publicclasstest09{

publicstaticvoidmain(String[] args){

for(inti=1;i<=1000;i++) {

intt =0;

for(intj=1;j<=i/2;j++) {

if(i%j==0) {

t+=j;

}

}

if(t==i) {

System.out.println(i);

}

}

}

}

【程序10】

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

publicclasstest10{

publicstaticvoidmain(String[] args){

doubleh=100;

doubles=100;

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

h=h/2;

s=s+2*h;

}

System.out.println(s);

System.out.println(h);

}

}

【程序11】

题目:有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?并把他们都输入。   public

classtest11{

publicstaticvoidmain(String[] args){

intcount=0;

for(inti=1;i<5;i++) {

for(intj=1;j<5;j++) {

for(intk=1;k<5;k++) {

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

count++;

System.out.println(i*100+j*10+k);

}

}

}

}

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%提成,从键盘输入当月利润,求应发放奖金总数?   import java.util.Scanner;public class

test12 {

publicstaticvoidmain(String[] args){

Scanner input =newScanner(System.in);

doublex=input.nextDouble();

doubley=0;

if(x>0&&x<=10) {

y=x*0.1;

}elseif(x>10&&x<=20) {

y=10*0.1+(x-10)*0.075;

}elseif(x>20&&x<=40) {

y=10*0.1+10*0.075+(x-20)*0.05;

}elseif(x>40&&x<=60) {

y=10*0.1+10*0.075+20*0.05+(x-40)*0.03;

}elseif(x>60&&x<=100) {

y=10*0.1+10*0.075+20*0.05+20*0.03+(x-60)*0.015;

}elseif(x>100) {

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

}

System.out.println(y);

}

}

【程序13】

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

publicclasstest13{

publicstaticvoidmain(String[] args){

for(inti=-100;i<10000;i++) {

if(Math.sqrt(i+100)%1==0&&Math.sqrt(i+268)%1==0) {

System.out.println(i);

}

}

}

}

【程序14】

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

import java.util.*;publicclasslianxi14 {publicstatic void main(String[] args) {intyear,month,day;intdays =0;intd =0;inte;     input fymd =newinput();do{     e =0;     System.out.print("输入年:");year=fymd.input();     System.out.print("输入月:");month= fymd.input();     System.out.print("输入天:");day= fymd.input();if(year<0||month<0||month>12||day<0||day>31) {     System.out.println("输入错误,请重新输入!");     e=1;     }     }while( e==1);

for(inti=1; i

switch (i) {

case1:

case3:

case5:

case7:

case8:

case10:

case12:

days =31;

break;

case4:

case6:

case9:

case11:

days =30;

break;

case2:

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

days =29;

}else{

days =28;

}

break;

}

d += days;

}

System.out.println(year+"-"+month+"-"+day+"是这年的第"+(d+day) +"天。");

}

}

classinput{

publicintinput() {

intvalue =0;

Scanner s =newScanner(System.in);

value = s.nextInt();

return value;

}

}

【程序15】

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

import java.util.Scanner;

publicclasstest15{

publicstaticvoidmain(String[] args){

Scanner input=newScanner(System.in);

intx=input.nextInt();

inty=input.nextInt();

intz=input.nextInt();

intt=0;

if(x>y) {

t=x;

x=y;

y=t;

}

if(y>z) {

t=z;

z=y;

y=t;

}

if(x>y) {

t=x;

x=y;

y=t;

}

System.out.println(x+""+y+""+z);

}

}

【程序16】

题目:输出9*9口诀。

publicclasstest16{

publicstaticvoidmain(String[] args){

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

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

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

System.out.print(" ");

}

System.out.println("");

}

}

}

【程序17】

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

publicclasstest17{

publicstaticvoidmain(String[] args){

intx=1;

for(inti=10;i>1;i--) {

x=(x+1)*2;

}

System.out.println(x);

}

}

【程序18】

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

publicclasstest18{

publicstaticvoidmain(String[] args){

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

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

if(i!=j) {

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

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

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

System.out.println("a:"+i+"\nb:"+j+"\nc:"+k);

}

}

}

}

}

}

}}

【程序19】

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

publicclasslianxi19{

publicstaticvoidmain(String[] args){

intH =7, W =7;//高和宽必须是相等的奇数

for(inti=0; i

for(intj=0; j

System.out.print(" ");

}

for(intk=1; k

System.out.print('*');

}

System.out.println();

}

for(inti=1; i<=H/2; i++) {

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

System.out.print(" ");

}

for(intk=1; k<=W-2*i; k++) {

System.out.print('*');

}

System.out.println();

}

}

}

【程序20】

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

publicclasstest20{

publicstaticvoidmain(String[] args){

doublesum=0,ver=2;

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

sum+=ver/i;

ver+=i;

}

System.out.println(sum);

}

}

【程序21】

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

publicclasstest21{

publicstaticvoidmain(String[] args){

longsum=0,ver=1;

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

ver=ver*i;

sum+=ver;

}

System.out.println(sum);

}}

【程序22】

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

publicclasstest22{

publicstaticvoidmain(String[] args){

System.out.println(fac(5));

}

publicstaticintfac(inti){

if(i==1)return1;

else{

returni*fac(i-1);

}

}

}

【程序23】

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

publicclasstest23{

publicstaticvoidmain(String[] args){

intage=10;

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

age+=2;

}

System.out.println( age);

}

}

【程序24】

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

//使用了长整型最多输入18位

importjava.util.Scanner;

publicclasstest24{

publicstaticvoidmain(String[] args) {

Scanner input=newScanner(System.in);

StringtoString=input.nextLine();

char[]num=toString.toCharArray();

System.out.println(num.length);

for(inti=num.length;i>0;i--) {

System.out.print(num[i-1]);

}

}

}

【程序25】

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

importjava.util.Scanner;publicclasstest25{

publicstaticvoidmain(String[] args) {

Scanner input =newScanner(System.in);

intnumtest=input.nextInt();

System.out.println(ver(numtest));

}

publicstaticboolean ver(intnum) {

if(num<0||(num!=0&&num%10==0))

returnfalse;

intver=0;

while(num>ver) {

ver=ver*10+num%10;

num=num/10;

}

return(num==ver||num==ver/10);

}

}

扩展阅读来源:https://blog.csdn.net/YaoChung/article/details/80793691

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. The name of a Java source file (a) has no restrictions (b) must be the same as the class it defines, ignoring case (c) must use the extension .class (d) must be the same as the class it defines, respecting case 2. Which of the following statements is (are) true about the use of an asterisk (*) in a Java import statement? Ⅰ.It does not incur run-time overhead. Ⅱ.It can be used to import multiple packages with a single statement. Ⅲ.It can be used to import multiple classes with a single statement (a) I, II, and III (b) I and III only (c) I only (d) III only ..... 9. According to the Java code conventions, files that contain Java source code have the suffix _____, and compiled bytecode files have the suffix _____. (a) .class, .java (b) .class, .javac (c) .java, .class (d) .javac, .class 10. As an aid in debugging a program in Java, print statements may be used to display which of the following types of information? I. The names of methods being called II. The values of the parameters of a method Ⅲ. The values of the instance variables of a class (a) I and II only (b) I and III only (c) II and III only (d) I, II, and III 1. In a UML class diagram's representation of a class, the top, middle, and lower rectangular compartments respectively describe the _____ of the class. (a) name, attributes, and methods (b) name, methods, and constants (c) attributes, methods, and name (d) attributes, methods, and constants 2. UML class diagrams can describe which of the following? I. The internal structure of classes Ⅱ. Relationships between classes (a) I and II (b) II only (c) None (d) I only ....... 1.The term class variable is a synonym for (a) a private data field (b) a static data field (c) a read-only variable (d) an instance variable 2. Consider the following Java program segment. import java.io.*; public class Test { public Test( ) { System.out.println("default"); } public Test( int i ) { System.out.println("non-default"); } public static void main(String[] args) { Test t = new Test(2); } } ......... 9. When a subclass defines an instance method with the same return type and signature as a method in its parent, the parent's method is said to be (a) private (b) hidden (c) overloaded (d) overridden 10. Which is a Java access modifier used to designate that a particular data field will not be inherited by a subclass? (a) final (b) protected (c) private (d) default 1. Consider the following Java program segment. String[] str = {"Three","Two","One"}; for (int i = 0; i < str.length; ++i) { System.out.println(str[i]+"/"); } What will be output upon execution of the program segment? (a) Three/Two/One/ (b) Three,Two,One (c) One,Two,Three (d) One/Two/Three/ 2. Consider the following Java program segment. int[] arr; arr = new int[3]; arr[2]=19; arr[1]=17; arr[0]=15; Which of the following Java statements is syntactically correct and semantically identical to the program segment? (a) int[] arr= {15, 17, 19}; (b) int[3] arr = {15, 17, 19}; (c) int arr = {15, 17, 19}; (d) int arr[3]= {15, 17, 19}; ........ 2. Which of the following statements is (are) true about any abstract method in Java? I. It contains no definition. Ⅱ. It cannot be declared public. (a) I and II (b) I only (c) None (d) II only 3. Consider the following Java program fragment. public void drive(Vehicle v) { ... } ... drive(obj); The method call drive(obj) is valid if obj is which of the following? I. A descendent of class Vehicle II. An ancestor of class Vehicle Ⅲ. An object of class Vehicle (a) I and III only (b) I, II, and III (c) III only (d) II and III only .....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值