机试: M个强盗和N个村民过河,求总的渡河次数
题目:
M个强盗和N个村民过河,
当河的两边强盗个数多于平民个数时, 村民会被杀死;
只有一艘小船,每次最多载两个人;
0<=M<=N
在保证所有村民都不被杀死的情况下,计算总的渡河次数。 如果不能满足条件, 返回-1.
实例
输入 2 2
输出 5
第一回: 1强盗+1个村民过河, 村民回来, 此时河对岸1个强盗, 这边2村民+1强盗
第二回:两个村民渡河, 一个村民返回来, 此时河对岸1个强盗+1个村民, 这边1村民+1强盗
第三回: 1村民+1强盗 一起渡河
总共5次, 因此输出5.
class Solution {
int crossRiver(int m, int n) {// m强盗n平民
if (m+n<=2) return 1;
if (m<n) return (m+n-2)*2+1;
if (m==2) return 5;
if (m==3) return 11;
return -1;
}
}