问题描述:
C语言编程 小明一家过桥问题
小明一家过一座桥,过桥的时候是黑夜,所以必须有灯,现在,
小明过桥需要2分钟,小明的弟弟要5分钟,
小明的爸爸要6分钟,小明的妈妈要9分钟,
小明的爷爷要13分钟.
每次过桥最多可以过两个人,而过桥的速度根据过桥最慢者而定,而且灯在点燃后40分钟就会熄灭,问小明一家如何过桥时间最短?
求C语言程序 最好用简单的方式编写并附上备注 新人真的做不出 求大虾们帮忙了
1个回答
分类:
综合
2014-10-09
问题解答:
我来补答
我是这样想的:选用时少的人和另一个人一起过桥(时耗算用时多的的人),选用时少的人返回传递火炬,如此下去,用时最少.
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号)回传火炬。全部代码如下:#includevoid 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;ia[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);}
结果如下://奇数个人//偶数个人
展开全文阅读