1、若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年时有多少条母牛。
package 趣味数学题;
import java.util.Scanner;
public class CountCows {
public void compute(){
int year;
int sum = 0;
int n;
System.out.print("请输入年:");
Scanner sc = new Scanner(System.in);
year = sc.nextInt();
for(n=1;n<=year;n++){
if(n<4)
sum = 1;
else if(n<8)
sum++;
else
sum += n-6;
}
System.out.println(year+" 年后,牛的总数为:"+sum+" 头");
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
CountCows cc = new CountCows();
cc.compute();
}
}
2、有一对兔子,从第三个月起每个月生一对兔子,小兔子从第三个月起每个月又生一对兔子,假设所有兔子都不死,编程序计算每个月的兔子是多少对(求20个月)。
package 趣味数学题;
import java.util.Scanner;
public class CountRabbit {
public int compute(int n){
if(n==1 || n==2)
return 1;
else
return compute(n-1)+compute(n-2);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
int month;
int sum;
System.out.print("请输入月:");
Scanner sc = new Scanner(System.in);
month = sc.nextInt();
CountRabbit cr = new CountRabbit();
sum = cr.compute(month);
System.out.print(month+" 月后,一共有兔子 "+sum+" 对");
}
}
3、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
package 趣味数学题;
public class Combination {
public void compute(){
int number = 0;
int sum = 0;
System.out.println("所有情况如下所示:");
for(int bai=1;bai<=4;bai++)
for(int shi=1;shi<=4;shi++)
for(int ge=1;ge<=4;ge++)
if(bai!=shi && shi!=ge && bai!=ge){
sum = sum+1;
number = bai*100 + shi*10 +ge;
System.out.print(number+"\t");
if(sum%4 == 0)
System.out.println();
}
System.out.println("一共有 "+sum+" 种情况。");
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Combination cb = new Combination();
cb.compute();
}
}
4、猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
package 趣味数学题;
public class CountPeach {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int sum = 1;
int day = 10;
for(int i = day;i>0;i--){
sum = (sum +1)*2;
}
System.out.print("第一天一共摘了 "+sum+" 个桃子。");
}
}
5、海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
package 趣味数学题;
/**
* 采用倒推法,再加上整除性
* 第5只猴子应分得255个桃子,
* 第4只猴子应分得319个桃子,
* 第3只猴子应分得399个桃子,
* 第2只猴子应分得499个桃子,
* 第1只猴子应分得624个桃子。
* 那么,原来总共有桃子3121个。
*/
public class PeachSum {
public static void main(String[] args) {
int number = 5;
while (true) {
if (isTheSmallestNumber(number)) {
break;
}
number++;
}
System.out.println("海滩上原来最少有 "+ number +" 个桃子");
}
static boolean isTheSmallestNumber(int number) {
int i = 0;
while (i < 5 && number > 0) {
if ((number - 1) % 5 == 0) {
int tmp = (number - 1) / 5 + 1;
number -= tmp;
i++;
} else {
return false;
}
}
return true;
}
}
6、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
package 趣味数学题;
import java.util.Scanner;
/**
* 从第一个人开始计数,下标为1,与数组不同,最后结果要加1
* 因为是围成一个圈,所以即使省两个人,也要轮流报数,直到剩下最后一个
*/
public class Count {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int n;
Scanner sc = new Scanner(System.in);
System.out.print("请输入总人数n= ");
n = sc.nextInt();
boolean array[] = new boolean[n];
for(int i=0;i<array.length;i++){
array[i] = true; //下标为true时说明还在圈里
}
int sum = n; //总人数
int countsum = 0; //报到的人数
int index = 0;
while(sum>1){
if(array[index] == true){
countsum++;
if(countsum == 3){
countsum = 0;
array[index] = false; //下标为flase时说明不在圈里
sum--;
}
}
index++; //每报一次数,下标加1
if(index == n){
index = 0; //将下标设为0重新开始
}
}
for(int i=0;i<n;i++){
if(array[i] == true){
System.out.print("最后留下的是原来第 "+ (i + 1) + " 号的那位.");
}
}
}
}