计算海滩上桃子有多少个【Java】

华为2017秋招笔试真题

 题目:海滩上有一堆桃子,m只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成m份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只、第m只猴子都是这样做的,问海滩上原来最少有多少个桃子? 

输入:

输入猴子个数m(3<=m<=9)

输出:

原来最少有多少个桃子

方法一:

import java.util.Scanner;

public class Taozi {
	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		System.out.println("请输入猴子的个数:");
		int m;	
		m = Integer.parseInt(input.next());
		outer:for(int i = 1;;i++) {      //采用穷举法
			int count = i;		// count记住的数是0, 1, 2, 3, 4......
			for (int j=0;j<m;j++) {		// 每个数循环判断m次
				if ((count-1)%m ==0)	// 如果这个数能满足吃掉1个再分成m份
					count = (count-1)/m*(m-1); //那么就将桃子吃掉一个分成m份, 留下m-1份
				else {
					continue outer;//如果不满足吃掉1个再分成m份, 那么直接外层循环进入下一次
				}				
			}
			System.out.println();
			System.out.println("原来最少有" + i + "个桃子");// 循环m次之后, 代表可以被m个猴子来分			
			return;
		}	
	}
		
}

方法二:

import java.util.Scanner;

public class Taozi2 {
	public static void main(String[] args) {		
		Scanner input = new Scanner(System.in);
		System.out.println("请输入猴子的个数:");
		int m;
		m = Integer.parseInt(input.next());
		int peach = 1; //最后剩一个桃子
		for(int i = 0;i < m; i++) {
			peach = peach * m;	//如果最初多m-1个就可以一直被m整除			
		}
		System.out.println();
		System.out.println("原来最少有" + (peach-(m-1)) + "个桃子");//最后把多出的m-1个减去
		
	}
}

程序结果如下:

猜你喜欢

转载自blog.csdn.net/qq_38150441/article/details/79732032