程序员交流社区
添加小编微信:372787553,备注 进群
1. 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子总数为多少?
/**
*
* 分析
* 1 2 3 4 5 6 7
* 种兔 1 1 1 1 2 3 5
* 小兔 0 0 1 2 3 5 8
* 总数 1 1 2 3 5 8 13
* 当月的总数 = 前两个月的和
*/
public static void main(String[] args) {
for (int i = 0; i < 12; i++) {
System.out.println(sum(i));
}
}
/**
* 求和
* @param mo
* @return
*/
static int sum(int mo){
//前两个月没有幼兔产生
if(1 == mo || 2 == mo){
return 1;
}
return sum(mo - 1) + sum(mo -2);
}
2. 打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
public static void main(String[] args) {
System.out.println(narcissus(153, 3));
System.out.println(narcissus(100, 3));
}
/**
*
* @param num 原数据
* @param pow 次方数
* @return
*/
static boolean narcissus(Integer num, Integer pow){
int x , y , z = 0;
//计算出十位与各位的数
int ten = num % 100;
//计算出百位
x = num / 100;
//计算出十位
y = ten/10;
//计算出各位
z = ten % 10;
int sum = (int) (Math.pow(x,pow) + Math.pow(y,pow) + Math.pow(z,pow));
System.out.println("计算水仙花数的和为:"+sum);
return sum == num;
}
3. 判断1-20之间有多少个素数,并输出所有素数
public static void main(String[] args) {
// 判断1-20之间有多少个素数,并输出所有素数
// 不能被2整除的数
System.out.println("个数:"+mouldTaking(20));
}
static int mouldTaking(Integer num){
AtomicInteger sum = new AtomicInteger(0);
for (int i = 1; i < num; i++) {
if(i % 2 !=0){
System.out.println("素数:"+i);
sum.incrementAndGet();
}
}
return sum.get();
}
4.二分查找
public static void main(String[] args) {
int array[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};
System.out.println(binSerch(array,5,array.length-1,81));
}
/**
* 递归实现
* @param art 数组
* @param start 开始下标
* @param end 结束下标
* @param key 需要查找的数值
* @return
*/
public static int binSerch(int art[],int start,int end ,int key){
int mid = (end + start)/2;
if (art[mid] == key){
return mid;
}
if (start >= end){
return -1;
}else if(key > art[mid]){
return binSerch(art,mid+1,end,key);
}else if(key < art[mid]){
return binSerch(art,start,mid-1,key);
}
return -1;
}