抽签问题改进算法
2015-05-23 21:25
316 查看
#if 0 你的朋友提议玩一个游戏,将写有数字的n个纸片放入口袋中,你可以从口袋中抽取4次纸片,每次记下纸片上的数字后都将其放回口袋中,如果这四个数字的和为m, 就是你赢,否则就是你的朋友赢,你挑战了好几次,结果一次也没有赢,于是撕破口袋,取出所有的纸片,检查自己是否有赢的可能性。 请编写一个程序,判断当纸片上写的数字是K1,K2,K3,...,Kn 时,是否村在抽取四次和为m的情况,如果存在,输出Yes,若不存在,输出No。 #endif #include <stdio.h> #include <stdlib.h> int Binary_search(int *Array ,int x,int n); int Solve(int *Array ,int n,int sum,int *BArray); int Partition_sort(int *Array,int low,int high); int QuickSort(int *Array,int low,int high); void Initial_list(int *Array,int n,int *BArray); void Initial_list(int *Array,int n,int *BArray) { int k=0; int i=0; int j=0; for(i=0;i<n;i++) for(j=0;j<n;j++) { BArray[k]=Array[i]+Array[j]; k++; } } int Partition_sort(int *BArray,int low,int high) { int location=*(BArray+low); while(low<high && *(BArray + high)>=location) { high--; } if(low<high) { *(BArray+low)=*(BArray+high); } while(low<high && *(BArray + high)<=location) { low++; } if(low<high) { *(BArray+high)=*(BArray+low); high--; } *(BArray+low)=location; return low; } int QuickSort(int *BArray,int low,int high) { int base=0; if(low<high) { base=Partition_sort(BArray,low,high); QuickSort(BArray,low, base-1); QuickSort(BArray,base+1,high); } return 0; } int Binary_search(int *BArray,int x,int n) { int mid=0; int begin=0; int end =n-1; int found=0; while(end-begin>=1) { mid=(begin + end )/2; if(x==*(BArray+mid)) return found=1; else if(x>*(BArray+mid)) begin=mid+1; else end=mid; } return found; } int Solve(int *Array ,int n,int sum,int *BArray) { int i=0,j=0; int m=0; int flag=0; for(i=0;i<n;i++) for(j=0;j<n;j++) { m=*(Array+i)+*(Array+j); if(Binary_search(BArray,sum-m,n*n)) { flag=1; break; } } return flag; } int main() { int a[3]={1,3,5}; int n=3; int sum=10; int b[9]; Initial_list(a,n,b); QuickSort(b,0,n*n-1); if(1==Solve(a,n,sum,b)) printf("Yes"); else printf("No"); return 0; }
相关文章推荐
- 关于傻子坐飞机问题的答案 (算法的改进)
- 连通性问题改进算法
- 算法小题之抽签问题
- 求公共子串问题以及其改进算法
- 子串查找问题改进算法
- 关于改进粒子滤波算法问题 救命啊
- 关于傻子坐飞机问题的答案 (算法的改进)
- acm--排序与位置问题(垃圾算法...更好的正在改进)
- 算法起步(3)抽签问题—合二为一(下)
- 快速排序的两种改进方法算法及topK问题求解
- 抽签问题的思考(二分算法)
- Zedboardwebcam设计问题篇(六)opencv处理帧数据之算法改进
- 算法起步(3)抽签问题—合二为一(上)
- 最长公共子序列问题的改进算法
- 求公共子串问题以及其改进算法
- 轮廓问题/Outline Problem-->改进的算法及时间复杂度分析
- 算法题--抽签问题的思考与解决
- 典型的求k短路径的问题,有很多种算法,暂时试了试Dijkstra+A*算法
- 【计算机算法分析】分治法——赛程问题
- 传说中的程序员核心——算法值不值得学,以及acm集训问题