过桥问题解算OC

121 阅读1分钟

问题 大致是这样的:

在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这四人尽快过桥。

  • 计算代码:
int i = [self travelBridge:@[@(1),@(2),@(5),@(8)];
//此过程可以计算 N人的过程
-(int)travelBridge:(NSArray <NSNumber *>*)times {
	//首先我们认为 数组中 数字 是被 按顺序排序
	NSMutableArray *mArray = [times mutableCopy];
	NSInteger length = times.count;
	if (length <= 2) {
		return [mArray[length -1] intValue];
	}else if (length == 3){
		return [mArray[0] intValue] + [mArray[1] intValue] + [mArray[2] intValue];
	}else{
		int totaltime = 0;
		int a = [mArray[0] intValue];
		int b = [mArray[1] intValue];
		int z = [mArray[length -1] intValue];
		int y = [mArray[length - 2] intValue];
		if (b*2 < a + y) {
			[mArray removeLastObject];
			[mArray removeLastObject];
			totaltime += b + a + z + b + [self travelBridge:mArray];
		}else{
			[mArray removeLastObject];
			totaltime += z + a + [self travelBridge:mArray];
		}
		return totaltime;
	}
}
  • 计算结果是: 15
  • 1 和 2 -> 1回 3 分
  • 5 和 8 -> 2 回 10 分
  • 1 和 2 -> 结束 2 分
  • 3 + 10 + 2 = 15 分