//有4个女人要过一座桥。她们都站在桥的某一边,要让她们在17分钟内全部通过这座桥。这时是晚上。她们只有一个手电筒。最多只能让两个人同时过桥。不管是谁过桥,不管是一个人还是两个人,必须要带着手电筒。手电筒必须要传来传去,不能扔过去。每个女人过桥的速度不同,两个人的速度必须以较慢的那个人的速度过桥。// 第一个女人:过桥需要1分钟;// 第二个女人:过桥需要2分钟;// 第三个女人:过桥需要5分钟;// 第四个女人:过桥需要10分钟。// 比如,如果第一个女人与第4个女人首先过桥,等她们过去时,已经过去了10分钟。如果让第4个女人将手电筒送回去,那么等她到达桥的另一端时,总共用去了20分钟,行动也就失败了。怎样让这4个女人在17分钟内过桥?还有别的什么方法?
#includeint maxOfTheTwo(int x,int y){
return x < y ? y : x;
}
int minOfTheTwo(int x,int y){
return x < y ? x : y;
}
int minOfTheThree(int x,int y,int z){
int temp = x < y ? x : y;
return temp < z ? temp : z;
}
int main(int argc, const char * argv[]) {
// insert code here...
//将四人过桥时间放入数组time
int time[4] = {2,5,10,1};
//对time进行升序排列
int temp;
for (int k=0; k<3; k++) {
for (int m=k+1; m<4; m++) {
if (time[k] > time[m]) {
temp = time[k];
time[k] = time[m];
time[m] = temp;
}
}
}
//将time元素按顺序赋给ABCD
int A,B,C,D;
A = time[0];
B = time[1];
C = time[2];
D = time[3];
printf("%d\n",A);
printf("%d\n",B);
printf("%d\n",C);
printf("%d\n",D);
int sum = 0;
//最小两个一起过(A、B)
// sum += B;
sum += maxOfTheTwo(A, B);
//对岸现在是A、B A、B中最小的A返回
// sum += A;
sum += minOfTheTwo(A, B);
//最大两个一起过(C、D)
// sum += D;
sum += maxOfTheTwo(C, D);
//对岸现在是B、C、D B、C、D中最小的B返回
// sum += B;
sum += minOfTheThree(B, C, D);
//现在还没过河的是A、B 一起过河
// sum += B;
sum += maxOfTheTwo(A, B);
printf("过河时间是 ---- %d\n",sum);
return 0;
}