趣味数学题

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、有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 
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个人围成一圈,顺序排号。从第一个人开始报数(从13报数),凡报到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) + " 号的那位.");
				
			}
		}

	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值