每天10道编程题-第一天
【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。
【程序3】 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
可以这样思考:第一个月后即第二个月时,1对兔子变成了两对兔子,其中一对是它本身,另一对是它生下的幼兔. 第三个月时两对兔子变成了三对,其中一对是最初的一对,另一对是它刚生下来的幼兔,第三对是幼兔长成的大兔子. 第四个月时,三对兔子变成了五对,第五个月时,五对兔子变成了八对······
1 package com.daliu.suanfa; 2 3 /** 4 * 【程序1】 5 * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 6 * 小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 7 * 8 */ 9 public class exp1_1 { 10 public static void main(String args[]) { 11 int i = 0; 12 math mymath = new math(); 13 for (i = 1; i <= 20; i++) 14 System.out.println(mymath.f(i)); 15 } 16 17 } 18 19 class math { 20 public int f(int x) { 21 if (x == 1 || x == 2) 22 return 1; 23 else 24 return f(x - 1) + f(x - 2); 25 } 26 }
1 package com.daliu.suanfa; 2 3 /** 4 * 【程序1】 5 * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 6 * 小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 7 * 1 1 2 3 5 8 13 21 34 55 .... 8 */ 9 public class exp1_2 { 10 public static void main(String args[]) { 11 int i = 0; 12 13 for (i = 1; i <= 20; i++) 14 System.out.print(f(i) + " "); 15 } 16 17 18 public static int f(int x) { 19 if (x == 1 || x == 2) 20 return 1; 21 else 22 return f(x - 1) + f(x - 2); 23 } 24 }
涨姿势:
斐波纳契数列还暗含着许多有趣的数字规律,如从第3个数开始每隔两个必是2的倍数,从第4个数开始每隔3个必是3的倍数,从第5个数开始每隔4个必是5的倍数……另外,这个数列最具有和谐之美的地方是,越往后,相邻两项的比值会无限趋向于黄金比0.61803……即[5^(1/2)-1]/2。
【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。
1 package com.daliu.suanfa; 2 3 /** 4 * 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 5 */ 6 public class exp2 { 7 public static void main(String args[]) { 8 int i = 0; 9 math2 mymath = new math2(); 10 for (i = 2; i <= 200; i++) 11 if (mymath.iszhishu(i) == true) 12 System.out.print(i + " "); 13 } 14 } 15 16 class math2 { 17 18 public boolean iszhishu(int x) { 19 for (int i = 2; i <= Math.sqrt(x); i++) 20 if (x % i == 0) 21 return false; 22 return true; 23 } 24 }
【程序3】 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
1 package com.daliu.suanfa; 2 3 /** 4 * 5 【程序3】 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。 6 例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 7 * 8 */ 9 public class exp3 { 10 public static void main(String args[]) { 11 int i = 0; 12 math3 mymath = new math3(); 13 for (i = 100; i <= 999; i++) 14 if (mymath.shuixianhua(i) == true) 15 System.out.print(i + " "); 16 } 17 } 18 19 class math3 { 20 21 public boolean shuixianhua(int x) { 22 int i = 0, j = 0, k = 0; 23 i = x / 100; 24 j = (x % 100) / 10; 25 k = x % 10; 26 if (x == i * i * i + j * j * j + k * k * k) 27 return true; 28 else 29 return false; 30 31 } 32 }
【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
1 package com.daliu.suanfa; 2 3 import java.util.Scanner; 4 5 /** 6 * 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 7 * 8 */ 9 public class exp4 { 10 11 public static void fengjie(int n) { 12 for (int i = 2; i <= n / 2; i++) { 13 if (n % i == 0) { 14 System.out.print(i + "*"); 15 fengjie(n / i); 16 } 17 } 18 System.out.print(n); 19 System.exit(0);// /不能少这句,否则结果会出错 20 } 21 22 public static void main(String[] args) { 23 24 // 获取输入值 方法 一 25 // String str = ""; 26 // str = javax.swing.JOptionPane.showInputDialog("请输入N的值(输入exit退出):"); 27 // int N = 0; 28 // try { 29 // N = Integer.parseInt(str); 30 // } catch (NumberFormatException e) { 31 // e.printStackTrace(); 32 // } 33 34 // 获取输入值 方法二 35 Scanner scan = new Scanner(System.in); 36 System.out.print("请输入要分解的值:"); 37 int N = scan.nextInt(); 38 System.out.print(N + "分解质因数:" + N + "="); 39 fengjie(N); 40 } 41 }
【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
1 package com.daliu.suanfa; 2 3 import java.util.Scanner; 4 5 /** 6 * 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 7 * 8 */ 9 public class exp5 { 10 public static void main(String[] args) { 11 12 // 获取输入值 方法一 13 // String str = ""; 14 // str = JOptionPane.showInputDialog("请输入N的值(输入exit退出):"); 15 // int N; 16 // N = 0; 17 // try { 18 // N = Integer.parseInt(str); 19 // } catch (NumberFormatException e) { 20 // e.printStackTrace(); 21 // } 22 23 // 获取输入值 方法二 24 String str = ""; 25 Scanner scan = new Scanner(System.in); 26 System.out.println("请输入分数:"); 27 int N = scan.nextInt(); 28 str = (N >= 90 ? "A" : (N >= 60 ? "B" : "C")); 29 System.out.println(str); 30 } 31 }
【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1 package com.daliu.suanfa; 2 /** 3 【程序6】 题目:输入两个正整数m和n,求其最大公约数 4 * 5 */ 6 public class exp6_1 { 7 public static void main(String args[]) { 8 commonDivisor(50, 100); 9 } 10 11 static int commonDivisor(int M, int N) { 12 if (N < 0 || M < 0) { 13 System.out.println("ERROR!"); 14 return -1; 15 } 16 if (N == 0) { 17 System.out.println("最大公约数是:" + M); 18 return M; 19 } 20 return commonDivisor(N, M % N); 21 } 22 }
1 package com.daliu.suanfa; 2 /** 3 * 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 4 * 5 */ 6 public class exp6_2 { 7 // 下面的方法是求出最大公约数 8 public static int gcd(int m, int n) { 9 while (true) { 10 if ((m = m % n) == 0) 11 return n; 12 if ((n = n % m) == 0) 13 return m; 14 } 15 } 16 17 public static void main(String args[]) throws Exception { 18 // 取得输入值 19 // Scanner chin = new Scanner(System.in); 20 // int a = chin.nextInt(), b = chin.nextInt(); 21 int a = 50; 22 int b = 100; 23 int c = gcd(a, b); 24 System.out.println("最小公倍数:" + a * b / c + "\n最大公约数:" + c); 25 } 26 }
【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1 package com.daliu.suanfa; 2 3 import java.util.Scanner; 4 /** 5 * 【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 6 * 7 */ 8 public class exp7 { 9 public static void main(String args[]) { 10 11 //获取字符串 12 System.out.println("请输入字符串:"); 13 Scanner scan = new Scanner(System.in); 14 String str = scan.next(); 15 16 //将获得的字符串转变成字符数组 17 char[] arrChar = str.toCharArray(); 18 19 //将字符数组的值通过循环放到字符串数组中 20 String[] arrStr = new String[arrChar.length]; 21 for (int i = 0; i < arrChar.length; i++) { 22 arrStr[i] = String.valueOf(arrChar[i]); 23 } 24 25 //然后利用正则表达式来判断 26 String E1 = "[\u4e00-\u9fa5]"; 27 String E2 = "[a-zA-Z]"; 28 int countH = 0; 29 int countE = 0; 30 for (String i : arrStr) { 31 if (i.matches(E1)) { 32 countH++; 33 } 34 if (i.matches(E2)) { 35 countE++; 36 } 37 } 38 System.out.println("汉字的个数" + countH); 39 System.out.println("字母的个数" + countE); 40 } 41 }
【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
1 package com.daliu.suanfa; 2 3 import java.io.*; 4 /** 5 * 【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 6 * 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制 7 * 8 */ 9 public class exp8_1 { 10 public static void main(String[] args) throws IOException { 11 int s = 0; 12 String output = ""; 13 BufferedReader stadin = new BufferedReader(new InputStreamReader( 14 System.in)); 15 System.out.println("请输入a的值"); 16 String input = stadin.readLine(); 17 for (int i = 1; i <= Integer.parseInt(input); i++) { 18 output += input; 19 int a = Integer.parseInt(output); 20 s += a; 21 } 22 System.out.println(s); 23 } 24 }
1 package com.daliu.suanfa; 2 3 import java.io.*; 4 /** 5 * 【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 6 * 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 7 * 8 */ 9 public class exp8_2 { 10 public static void main(String[] args) throws IOException { 11 int s = 0; 12 int n; 13 int t = 0; 14 BufferedReader stadin = new BufferedReader(new InputStreamReader( 15 System.in)); 16 String input = stadin.readLine(); 17 n = Integer.parseInt(input); 18 for (int i = 1; i <= n; i++) { 19 t = t * 10 + n; 20 s = s + t; 21 System.out.println(t); 22 } 23 System.out.println(s); 24 } 25 }
【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
1 package com.daliu.suanfa; 2 3 /** 4 * 5 【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。 6 例如6=1+2+3.编程 找出1000以内的所有完数。 7 * 8 */ 9 public class exp9 { 10 public static void main(String[] args) { 11 int s; 12 for (int i = 1; i <= 1000; i++) { 13 s = 0; 14 for (int j = 1; j < i; j++) 15 if (i % j == 0) 16 s = s + j; 17 if (s == i) 18 System.out.print(i + " "); 19 } 20 System.out.println(); 21 } 22 }
【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
1 package com.daliu.suanfa; 2 3 /** 4 * 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半; 5 * 再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 6 * 7 */ 8 public class Ex10 { 9 public static void main(String[] args) { 10 double s = 0; 11 double t = 100; 12 for (int i = 1; i <= 10; i++) { 13 s += t; 14 t = t / 2; 15 } 16 System.out.println(s); 17 System.out.println(t); 18 19 } 20 }