过桥问题【经典笔试问题】
2012-11-13 20:36
204 查看
#include <assert.h> #include <stdio.h> #include <stdlib.h> int CrossBridge(int n, int *p); int cmp(const void*p1, const void *p2) { return *(int*)p1-*(int*)p2; } int main() { int *p; int n; printf("enter the group size: "); scanf("%d",&n); p=new int ; int i; for (i=0;i<n;i++) { scanf("%d",p+i); } qsort(p,n,sizeof(int),cmp); printf("time: %d\n",CrossBridge(n,p)); delete []p; return 0; } int CrossBridge(int n, int *p) { assert(n>0 && NULL != p); int ti=0; if (n==1) { printf("A-->B: %d\n", p[0]); ti=p[0]; return ti; } else if (n==2) { printf("A-->B: %d, %d\n", p[0], p[1]); ti=p[1]; return ti; } else if (n==3) { printf("A-->B: %d, %d\n", p[0],p[1]); printf("B-->A: %d\n", p[0]); printf("A-->B: %d, %d\n", p[0],p[2]); ti=p[1]+p[0]+p[2]; return ti; } else { if (p[0]+p[n-2] > p[1]*2) { printf("A-->B: %d, %d\n", p[0],p[1]); printf("B-->A: %d\n", p[0]); printf("A-->B: %d, %d\n", p[n-2],p[n-1]); printf("B-->A: %d\n", p[1]); return p[1]+p[0]+p[n-1]+p[1]+CrossBridge(n-2,p); }else { printf("A-->B: %d, %d\n", p[0],p[n-1]); printf("B-->A: %d\n", p[0]); printf("A-->B: %d, %d\n", p[0],p[n-2]); printf("B-->A: %d\n", p[0]); return p[n-1]+p[n-2]+p[0]+p[0]+CrossBridge(n-2,p); } } }
相关文章推荐
- 括号匹配问题与经典笔试面试题目解析
- 约瑟夫环问题,经典笔试,鄙视
- 经典智力测试:过桥问题
- 【Java笔试题】经典出圈问题
- 经典过桥问题的思路解析
- 经典智力测试:过桥问题
- 括号匹配问题与经典笔试面试题目解析
- 经典面试智力题(过桥问题)及完整java代码
- 一次笔试题三个经典问题的总结
- 转]C,C++经典问题,及面试笔试题
- 过桥问题(美团2014笔试题)
- 面试题 C/C++经典问题,及面试笔试题
- C,C++经典问题,及面试笔试题
- 经典笔试面试题——杂题(各种各样的小问题)
- ZigZag排列问题与经典笔试面试题目解析
- C,C++经典问题及面试笔试题
- 经典过桥问题证明
- 面试题——C/C++经典问题,及面试笔试题
- 经典互斥问题模拟--单车道过桥--模拟代码
- 面试题——C/C++经典问题,及面试笔试题