首页 > 代码库 > Java经典算法(一)
Java经典算法(一)
Java中经典的一些算法(一)
【程序01】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:第一个月兔子对数为1,第二个月兔子对数为1,第三个月兔子对数为2,第四个月兔子对数为3,第五个月兔子对数为5,....
该"兔子数列"(也即是斐波那契数列),从第二项开始,每一项都等于前两项之和,1,1,2,3,5,8,13,21,34,.... 需要注意的是第一个1代表的是第1项,第0项为0。
下面的Java代码只是根据输入的月份,来输出当月的兔子对数。
import java.util.Scanner; public class Java01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入要查询的月份:"); int month = sc.nextInt(); System.out.println("第" + month + "个月兔子共有" + fib(month) + "对。"); } public static int fib(int month) { if (month == 1 || month == 2) { return 1; } else { return fib(month - 1) + fib(month - 2); } } }
【程序02】题目:判断101-200之间有多少个素数,并输出所有素数。
分析:素数,它除了能表示为它自己和1的乘积以外,不能表示为任何其他两个整数的乘积。
判断素数的一个方法是:用一个数分别去除2到这个数的平方根,如果能被整除,则表明此数不是素数,反之是素数。import java.util.ArrayList; public class Java02 { public static void main(String[] args) { int m, n; int temp = 0; ArrayList<Integer> alist = new ArrayList<Integer>(); A: for (n = 101; n <= 200; n++) { // 采用了标签的形式 for (m = 2; m < n / 2; m++) { if (n % m == 0) { continue A; } } alist.add(n); } System.out.println("101-200共有"+alist.size()+"个素数。"); System.out.println("分别如下:"); for(int one:alist){ temp++; System.out.print(one+" "); if (temp % 5 == 0) { //每行输出5个 System.out.println(); } } } }
运行结果:
【程序03】题目:求100之内的素数
分析:和程序02的思路大体一致。
public class Java03 { public static void main(String[] args) { int m, n; int temp = 0; System.out.println("100以内的素数有:"); A: for (n = 2; n <= 100; n++) { // 采用了标签的形式 for (m = 2; m < n / 2; m++) { if (n % m == 0) { continue A; } } System.out.print(n + " "); temp++; if (temp % 5 == 0) { // 每行输出5个 System.out.println(); } } } }
输出结果:
【程序04】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
import java.util.ArrayList; public class Java04 { public static void main(String[] args) { ArrayList<Integer> alist = new ArrayList<Integer>(); int temp = 0; int count = 0; for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 4; j++) { for (int k = 1; k <= 4; k++) { if (i != j && j != k && k != i) { temp = i * 100 + j * 10 + k; alist.add(temp); } } } } System.out.println("能组成"+alist.size()+"个互不相同且无重复数字的三位数。"); System.out.println("分别是:"); for(int one:alist){ count++; System.out.print(one+" "); if (count % 5 == 0) { //每行输出5个 System.out.println(); } } } }
输出结果:
【程序05】题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
import java.util.Scanner; public class Java05 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入一个正整数:"); int n = sc.nextInt(); System.out.println(n+"分式因解的结果如下:"); System.out.print(n + "="); solution(n); } public static void solution(int n) { for (int i = 2; i <= n; i++) { if (n == i) { System.out.println(i); return; } if (n > i && (n % i == 0)) { System.out.print(i + "*"); solution(n / i); break; } } } }
输入示例:
【程序06】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
import java.util.Scanner; public class Java06 { public static void main(String[] args) { System.out.println("请输入一行字符:"); Scanner sc = new Scanner(System.in); String inStr = sc.nextLine(); System.out.println("统计结果如下:"); count(inStr); } public static void count(String inStr) { int letter = 0; int number = 0; int blank = 0; int other = 0; for (int i = 0; i < inStr.length(); i++) { char in = inStr.charAt(i); if (in >= '0' && in <= '9') number++; else if ((in >= 'a' & in <= 'z') || (in >= 'A' & in <= 'Z')) letter++; else if (in == ' ') blank++; else other++; } System.out.println("字母的个数为:" + letter + "\n数字的个数为:" + number + "\n空格的个数为:" + blank + "\n其他符号的个数为:" + other); } }
输入示例:
【程序07】题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
分析:假设猴子每天吃桃前的数量为 sum,吃的桃子的数量是sum/2+1,则每天桃子的剩余量为:res = sum-(sum/2+1),即 sum =(res+1)*2。根据题意,第10天的桃子sum为1,可以理解为第9天的res为1,从而可以得到第9天的sum=(1+1)*2=4,第9天的sum也即是第8天的res ...就这样依次进行,就可以得出第一天共摘了多少个桃子。
public class Java07 { public static void main(String[] args) { int sum = 0; int res = 1; for (int day = 9; day >= 1; day--) { sum = (res + 1) * 2; res = sum; } System.out.println("第一天共摘了" + sum + "个桃子。"); } }
Java经典算法(一)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。