c语言趣味程序设计过桥,C语言编程 小明一家过桥问题

问题描述:

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);}

结果如下://奇数个人//偶数个人

展开全文阅读

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值