Fork me on GitHub

每天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 }

 


 

posted @ 2014-12-01 08:28  刘哥聊技术  阅读(413)  评论(0编辑  收藏  举报