编程思维 | 小明一家如何过桥

年轻人如果心存对未来的崇敬,对今天的认真踏实,对昨天的感恩,就会有机会。

- 马云 -

 


【问题区】

    小明一家过一座桥,过桥时是黑夜,所以必须有灯。现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃后30秒就会熄灭。

问:小明一家如何过桥?


【提示区】

        要在最短的过桥时间内过桥,一定要让考虑过桥消耗时间最长的两个人同时过桥!同时,让过桥速度最快的人返回送灯。同学们,Good Luck!


【视频讲解】

   请前往腾讯视频观看:

   https://v.qq.com/x/page/l0823kihobf.html

【C代码实现区】

    

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

 

#define SIZE 5

 

/**********************************

 *使用冒泡排序对数组实现由小到大的排序排列

 *参数: 

 *     nums - 待排序的数组

 *     len  - 数组的长度

 *返回值:

 *       无

***********************************/

void bubble_sort(int nums[],int len){
    int i = 0, j = 0;
    int temp = 0, isSorted = 0;

    for(i=0; i<len-1; i++){

        isSorted = 1; //假设剩下的元素已经排序好了

        for(j=0; j<len-1-i; j++){
            if(nums[j] > nums[j+1]){
                temp = nums[j];
nums[j]
= nums[j+1]; nums[j+1] = temp; //一旦需要交换数组元素,继续排序 isSorted = 0; } }
//如果没有发生交换,说明剩下的元素已经排序好了 if(isSorted) break; }
}
int main(void){ int i = 0; int times = 1; int src[SIZE]={12,8,1,3,6};//待过河人数和耗时 int slen = SIZE;//未过河人数 int dest[SIZE]={0};//已过河人数和耗时信息 int dlen = 0;//已过人数 int time = 0;//过河总耗时 while(slen>1){ /* 如果是第奇数(1,3...)趟,让最快的两个同时过河, 同时让速度最快的返回送灯 */ bubble_sort(src, slen); if((times%2) == 1){ dest[dlen++] = src[0]; dest[dlen++] = src[1]; time += src[1]; printf("-->%d %d 同时过河,耗时:%d\n",src[0], src[1], src[1]); //耗时最长的两人同时过河,从dest 数组中删除 for(i=2; i< slen; i++){ src[i-2]=src[i]; } slen-=2;
}
else {//第偶数(2,4...)趟,让最慢的两个人同时过河 dest[dlen++] = src[slen-2]; dest[dlen++] = src[slen-1]; time += src[slen-1];
printf(
"-->%d %d 同时过河,耗时:%d\n",src[slen-1], src[slen-2], src[slen-1]); slen-=2; } if(slen<1) break;

/* 让已到达的人中速度最快的人返回送灯 算法实现:先将数组从小到大排序,再派第一个返回送灯 */ bubble_sort(dest,dlen); src[slen++]=dest[0]; time += dest[0];
printf(
"<-- %d 返回送灯\n", dest[0]); //耗时最长的人返回,从dest 数组中删除 for(i=1; i< dlen; i++){ dest[i-1]=dest[i]; } dlen--; times++; } printf("\n过河总耗时:%d\n", time); return 0; }

--------------------------------

运行结果:

猜你喜欢

转载自www.cnblogs.com/51bc/p/10273466.html