二:经典算法问题?
2.1鸡兔同笼问题(穷举法)
已知:鸡兔共35只,共94只脚,那么鸡和兔各几只?
示例代码:
1 public class SameCage { 2 public static void main(String[] args) { 3 //循环变量j,控制小鸡的个数: 0到35递增 4 //循环变量t,控制兔子的个数: 35到0递减 5 for(int j=0,t=35; j<=35; j++,t--) {//如果有多个小条件,用逗号隔开 6 //保证脚的数量是94 7 if(j*2 + t*4 == 94) { 8 System.out.println("鸡:"+j+", 兔:"+t); 9 } 10 } 11 } 12 }
输出结果:
鸡:23, 兔:12
2.2斐波那契问题
已知:斐波那契数列的前几个数分别为0,1,1,2,3,5…从第三项开始,每一项都等于前两项的和.请接收用户输入的整数n,求出此数列的前n项.
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
其规律很明显,从第3个数开始,每个数都等于它前两个数的和。
下面我们可以通过用户输入的数字n来输出斐波那契数列的前n项
示例代码:
1 public class Faibonacci { 2 public static void main(String[] args) { 3 System.out.println("请输入您要测试的数:"); 4 int n = new Scanner(System.in).nextInt(); 5 //判断n是否是不正常的范围 6 if(n<1){ 7 System.out.println("输入数据有误!!!"); 8 } 9 //n==1 10 if(n==1){ 11 System.out.println(0); 12 } 13 //n==2 14 if(n==2){ 15 System.out.println(0+"\t"+1); 16 } 17 //n==3 18 if(n==3){ 19 System.out.println(0+"\t"+1+"\t"+1); 20 } 21 //拼接前n项 22 if(n>3){ 23 System.out.print(0+"\t"+1+"\t"+1+"\t"); 24 } 25 //循环输出后面的数据 26 int f1=1; 27 int f2=1; 28 int next=0; 29 for(int i=4;i<=n;i++){ 30 next=f1+f2; 31 f1=f2; 32 f2=next; 33 System.out.print(next+"\t"); 34 } 35 } 36 }
如: 输入 10
结果为: 0 1 1 2 3 5 8 13 21 34
2.3打印100以内除了尾数为3,5,7的所有数
示例代码:
1 public class ForContinue { 2 public static void main(String[] args) { 3 System.out.println("结果为:"); 4 for(int i=1;i<=100;i++) { 5 int y = i%10;//100以内的数,通过取余求出尾数 6 if(y==3 || y==5 || y==7) { 7 continue;//如果尾数为3 5 7 ,则跳过后面的打印,进行下一轮循环 8 } 9 System.out.print(" "+i); 10 } 11 } 12 }
输出结果: 1 2 4 6 8 9 10 11 12 14 16 18 19 20 21 22 24 26 28 29 30 31 32 34 36 38 39 40 41 42 44 46 48 49 50 51 52 54 56 58 59 60 61
62 64 66 68 69 70 71 72 74 76 78 79 80 81 82 84 86 88 89 90 91 92 94 96 98 99 100
2.4求猴子大王
15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子称为大王,问:哪只猴子会成为大王?
示例代码:
1 public class MonkeyKing { 2 public static void main(String[] args) { 3 //1.定义长度为15的数组保存猴子,boolean类型是为了判断猴子是否存活 4 boolean[] b=new boolean[15]; 5 6 //2.依次遍历每一只猴子 7 //true---未淘汰 false---已淘汰 8 for(int i=0;i<b.length;i++){ 9 b[i]=true;//先把所有猴子设置成存活 10 } 11 //3.定义变量保存猴子报的数 12 int num=0; 13 //4.定义变量保存剩余的猴子数 14 int monkeyLeft=15; 15 //5.定义数组下标 16 int index=0; 17 //6.循环,直到只剩最后一只猴子(猴子王) 18 while(monkeyLeft>1){//判断条件 19 //7.检测猴子是否已淘汰 20 if(b[index]){ 21 //8.报数 22 num++; 23 //9.判断报数是否为7 24 if(num==7){ 25 b[index]=false;//为7淘汰 26 monkeyLeft--;//猴子数减一 27 num=0;//报数归零 28 } 29 30 } 31 32 //10.下标移动 33 index++; 34 //11.围成一圈---最后一个置为0 35 if(index==15){ 36 index=0; 37 } 38 } 39 40 //遍历数组,找到最后活着的那个猴子王 41 for(int i=0;i<b.length;i++){ 42 if(b[i]){ 43 System.out.println(i+1); 44 } 45 } 46 } 47 }
输出结果: 5
2.5古典问题:生兔子问题
有一对兔子,从出生后第3个月起都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月兔子的对数为多少?
程序分析:前两个月兔子的对数为1
从第三个月开始,兔子的对数变成了 2 3 5 8 13 21 …
示例代码:
1 public class GetRabbitNum { 2 public static void main(String[] args) { 3 System.out.println("请输入要判断的月数:"); 4 int month = new Scanner(System.in).nextInt(); 5 System.out.println("第"+month+"月兔子的对数为:"+getSum(month)); 6 } 7 8 public static int getSum(int month) { 9 //如果是前两个月,还是1对兔子 10 if(month == 1 || month == 2) { 11 return 1; 12 }else { 13 //从第三个开始,兔子按照2 3 5 8 13 21变化 14 return getSum(month-1)+getSum(month-2); 15 } 16 }
请输入要判断的月数: 12
第12月兔子的对数为:144
2.6打印水仙花数
2.7回文问题
2.8二分法查找
2.9完数问题
2.10杨辉三角
标签:Java,int,System,兔子,month,面试,算法,猴子,public From: https://www.cnblogs.com/zhaosq/p/16810976.html