作业帮 > 综合 > 作业

C语言编程 小明一家过桥问题

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/06/22 20:27:58
C语言编程 小明一家过桥问题
小明一家过一座桥,过桥的时候是黑夜,所以必须有灯,现在,
小明过桥需要2分钟,小明的弟弟要5分钟,
小明的爸爸要6分钟,小明的妈妈要9分钟,
小明的爷爷要13分钟.
每次过桥最多可以过两个人,而过桥的速度根据过桥最慢者而定,而且灯在点燃后40分钟就会熄灭,问小明一家如何过桥时间最短?
求C语言程序 最好用简单的方式编写并附上备注 新人真的做不出 求大虾们帮忙了
C语言编程 小明一家过桥问题
我是这样想的:选用时少的人和另一个人一起过桥(时耗算用时多的的人),选用时少的人返回传递火炬,如此下去,用时最少.
int i,n=0,a[1024];
for(i=0;;i++)
{
scanf("%d",&a[i]); //随机输入时耗
n++; //计算输入个数
if(getchar()=='\n')break; //遇回车中断
}
int MIN,TIME=0;
for(i=0;i
再问: 你好,这个程序显示没错误 但是运行不了
再答: 看了gdx2013的解答 ,我发现我前面总结的规律是错误的,我认真考虑后,总结了N个人过河的一般规律,感觉的应该是这样的:1、 先将N个人按过河的时耗长短重新排列(从短到长 可编号);2、按编号每2个人为一组过河(奇偶数分情况),先时耗最短的2个人(1号、2号)过河,在到达对岸时,让时耗最短的人(1号)回传火炬;3、时耗最长的2个人过河,在到达对岸时,让时耗最短的人(2号)回传火炬;4、重复2-3步骤即可;关键点:时耗最长的2个人过河,在到达对岸时,保持有耗最短的人(1号或者2号)回传火炬。全部代码如下:#include<iostream>void main(){\x09    int i,j,temp,TIME=0,n=0,a[1024];     for(i=0;;i++)    {        scanf("%d",&a[i]);  //随机输入时耗        n++;        //计算输入个数        if(getchar()=='\n')break; //遇回车中断    }\x09    for(i=0;i<n-1;i++)    //选择排序(从小到大)\x09    {\x09\x09        for(j=i+1;j<n;j++)  \x09\x09        {\x09\x09\x09\x09\x09\x09            if(a[i]>a[j])\x09\x09\x09            { temp=a[i];a[i]=a[j]; a[j]=temp;}\x09\x09        }\x09    }\x09    if(n%2 == 0)   //偶数个人\x09    {\x09\x09        for(i=n-1;i>1;i=i-2)  TIME+=a[i]; \x09\x09        TIME =TIME+(n/2-1)*(a[0]+a[1])+(n/2)*a[1];     //自行总接的规律\x09    }\x09    else    //奇数个人\x09    {\x09\x09        for(i=n-1;i>2;i-=2)    TIME+=a[i]; \x09\x09        TIME =TIME+int(n/2)*(a[0]+a[1])+(int(n/2)-1)*a[1]+a[2];   \x09    }    if(TIME<40) printf("最短时长是%dmin",TIME);    else printf("最短时长是%dmin,无解",TIME);}
结果如下://奇数个人//偶数个人