1、java基础50道经典练习题及答案沃克IT教育JAVA基础编程练习题整理:Lemon【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21。.。 public class Prog1 public static void main(String args) int n = 10; System。out。println(”第”+n+个月兔子总数为”+fun(n)); private static int fun(int n) if
2、(n=1 | n=2) return 1; else return fun(n-1)+fun(n-2); 【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数.public class Prog2 public static void main(String args) int m = 1; int n = 1000; int count = 0; /统计素数个数 for(int i=m;in;i+) if(isPrime(i)) count+; System。out。
3、print(i+” ”); if(count%10=0) System。out.println(); System.out.println(); System.out.println(在”+m+和+n+之间共有+count+”个素数); /判断素数 private static boolean isPrime(int n) boolean flag = true; if(n=1) flag = false; else for(int i=2;i=Math.sqrt(n);i+) if((ni)=0 | n=1) flag = false; break; else flag = true; re
4、turn flag; 【程序3】题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数”,因为153=1的三次方5的三次方3的三次方。 程序分析:利用for循环控制100999个数,每个数分解出个位,十位,百位。public class Prog3 public static void main(String args) for(int i=100;ik,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步.(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。public class
5、Prog4 public static void main(String args) int n = 13; decompose(n); private static void decompose(int n) System.out。print(n+”=”); for(int i=2;in+1;i+) while(ni=0 & n!=i) n/=i; System。out.print(i+”); if(n=i) System.out.println(i); break; 【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C
6、表示。程序分析:(ab)?a:b这是条件运算符的基本例子。 public class Prog5 public static void main(String args) int n = 1; try n = Integer。parseInt(args0); catch(ArrayIndexOutOfBoundsException e) System.out.println(”请输入成绩”); return; grade(n); /成绩等级计算 private static void grade(int n) if(n100 n0) System。out。println(”输入无效”); el
7、se String str = (n=90)?”分,属于A等”:((n60)?分,属于B等:”分,属于C等”); System。out。println(n+str); 【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。程序分析:利用辗除法。public class Prog6 public static void main(String args) int m,n; try m = Integer。parseInt(args0); n = Integer。parseInt(args1); catch(ArrayIndexOutOfBoundsException e) Syste
8、m。out.println(输入有误); return; max_min(m,n); /求最大公约数和最小公倍数 private static void max_min(int m, int n) int temp = 1; int yshu = 1; int bshu = m*n; if(nm) temp = n; n = m; m = temp; while(m!=0) temp = nm; n = m; m = temp; yshu = n; bshu /= n; System.out.println(m+和+n+”的最大公约数为”+yshu); System。out.println(m
9、+”和”+n+的最小公倍数为+bshu); 【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数.程序分析:利用while语句,条件为输入的字符不为n.import java.util。Scanner;public class Prog7_1 public static void main(String args) System。out。print(”请输入一串字符:); Scanner scan = new Scanner(System。in); String str = scan.nextLine();/将一行字符转化为字符串 scan。close(); cou
10、nt(str); /统计输入的字符数 private static void count(String str) String E1 = u4e00u9fa5;/汉字 String E2 = ”a-zAZ”; String E3 = ”0-9; String E4 = s”;/空格 int countChinese = 0; int countLetter = 0; int countNumber = 0; int countSpace = 0; int countOther = 0; char array_Char = str。toCharArray();/将字符串转化为字符数组 Strin
11、g array_String = new Stringarray_Char.length;/汉字只能作为字符串处理 for(int i=0;i list = new ArrayList(); char array_Char = str.toCharArray(); for(char c:array_Char) list.add(String。valueOf(c));/将字符作为字符串添加到list表中 Collections.sort(list);/排序 for(String s:list) int begin = list.indexOf(s); int end = list。lastInd
12、exOf(s); /索引结束统计字符数 if(list.get(end)=s) System。out。println(字符”+s+有+(endbegin+1)+”个); 【程序8】题目:求s=a+aa+aaa+aaaa+aa.。.a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 程序分析:关键是计算出每一项的值.import java.util。Scanner;public class Prog8 public static void main(String args) System。out。print(求s=a+aa+aaa+
13、aaaa+。.的值,请输入a的值:); Scanner scan = new Scanner(System.in).useDelimiter(s*”);/以空格作为分隔符 int a = scan.nextInt(); int n = scan.nextInt(); scan.close();/关闭扫描器 System.out.println(expressed(2,5)+add(2,5); /求和表达式 private static String expressed(int a,int n) StringBuffer sb = new StringBuffer(); StringBuffer
14、 subSB = new StringBuffer(); for(int i=1;in+1;i+) subSB = subSB。append(a); sb = sb。append(subSB); if(in) sb = sb。append(”+”); sb.append(=); return sb。toString(); /求和 private static long add(int a,int n) long sum = 0; long subSUM = 0; for(int i=1;in+1;i+) subSUM = subSUM10+a; sum = sum+subSUM; return
15、 sum; 【程序9】题目:一个数如果恰好等于它的因子之和,这个数就称为完数”。例如6=123.编程找出1000以内的所有完数.public class Prog9 public static void main(String args) int n = 10000; compNumber(n); /求完数 private static void compNumber(int n) int count = 0; System。out。println(n+以内的完数:”); for(int i=1;in+1;i+) int sum = 0; for(int j=1;ji/2+1;j+) if((
16、ij)=0) sum += j; if(sum=i) System.out。print(i+ ”); if(count+)5=0) System.out。println(); 【程序10】题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?import java.util。Scanner;public class Prog10 public static void main(String args) System.out。print(请输入小球落地时的高度和求解的次数:”); Scanner scan = new Sc
17、anner(System。in).useDelimiter(”s); int h = scan.nextInt(); int n = scan.nextInt(); scan.close(); distance(h,n); /小球从h高度落下,经n次反弹后经过的距离和反弹的高度 private static void distance(int h,int n) double length = 0; for(int i=0;in;i+) length += h; h /=2.0 ; System.out。println(经过第+n+次反弹后,小球共经过”+length+米,+”第”+n+次反弹高
18、度为+h+米); 【程序11】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。public class Prog11 public static void main(String args) int count = 0; int n = 0; for(int i=1;i1000000) profit = profit_sub1000000; profit_sub = 1000000; prize += profit0.01; if(profit600000) p
19、rofit = profit_sub-600000; profit_sub = 600000; prize += profit*0.015; if(profit400000) profit = profit_sub-400000; profit_sub = 400000; prize += profit*0。03; if(profit200000) profit = profit_sub-200000; profit_sub = 200000; prize += prize0。05; if(profit100000) profit = profit_sub-100000; profit_sub
20、 = 100000; prize += profit0。075; prize += profit_sub*0.1; return prize; 【程序13】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果.public class Prog13 public static void main(String args) int n=0; for(int i=0;i100001;i+) if(isCompSqrt(i+100) & isCompSqrt(i+268) n = i; break