华为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个减去 } }
程序结果如下: