趣味程序设计_过桥问题

#include <stdio.h>

void bubblesort (int k[], int n );
int f( int k[], int n );
 
int main(){
	int n, i, time;
	while( scanf("%d",&n) == 1 ){
		int k[n];
		time = 0;
		for( i=0; i<n; i++ ){
			scanf("%d", &k[i] );
		}

		bubblesort( k, n );				// 把数组中的元素从 小到 大 排序;

	printf("%d\n",f( k, n ));	
	}
	return 0;
}

int f( int k[], int n ){
	int time;
	if( n==1 ) time = k[0];
	if( n==2 ) time = k[1];
	if( n==3 ) time = k[0] + k[1] + k[2];
	if( n>=4 ) {
		if( 2*k[1] >= k[0] + k[n-2] )	time = 2*k[0] + k[n-1] + k[n-2] + f( k, n-2 );
		else							time = 2*k[1] + k[0] + k[n-1] 	+ f( k, n-2 );
	}
	return time;
}

void bubblesort( int k[], int n ){
	int i, j, ret;
	for( j=1; j<n; j++ )
	for( i=0; i<n-j; i++ ){
		if( k[i]>k[i+1] ){
			ret = k[i];
			k[i] = k[i+1];
			k[i+1] = ret;
		}
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 过问题是一个经典的计算机科学问题,可以使用Python来解决。 首先,我们需要先了解问题的背景和规则: 假设在一个夜晚,4个人需要过一座,过的时候需要一盏灯照明,每个人的速度不同,第一个人需要1分钟过,第二个人需要2分钟,第三个人需要5分钟,第四个人需要10分钟。现在有一盏灯,每次只能由1人或2人带着过,两个人一起走时,速度和时间按照走得慢的那个人来计算。请问最快多少时间可以让他们全部过? 下面是一个使用Python解决过问题的具体实现: ```python import itertools def calculate_time(persons): # 计算一组人过的时间 time = 0 for p in persons: time = max(time, p) return time def cross_bridge(persons): # 计算所有人过的最小时间 n = len(persons) min_time = float('inf') for i in range(1, n + 1): for group in itertools.combinations(persons, i): # 一人过 if len(group) == 1: time = calculate_time(group) # 两人过 else: t1 = max(group) t2 = min(group) time = t1 + t2 # 更新最小时间 if time < min_time: min_time = time return min_time persons = [1, 2, 5, 10] print(cross_bridge(persons)) # 输出最小时间 ``` 在这个代码中,我们使用了Python的itertools模块中的combinations函数来枚举所有人过的方案,然后计算每个方案的时间,最后返回所有方案中最小的时间。 注意,这个算法只适用于人数较少的情况,如果人数很多,那么计算量会非常大,这时需要使用更加高效的算法来解决问题

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值