求解查找假币问题
二分
#include<stdio.h> #include<stdlib.h> #include<time.h> #define MAX 100 int a[MAX]; int n; int SUM(int low,int high){int sum=0;for(int i=low;i<=high;i++){sum+=a[i];}return sum; } int solve(int low,int high){if(low==high){return low;}if(low==high-1){if(a[low]<a[high]) return low;else return high;}int mid=(low+high)/2;int sum1,sum2;if((high-low+1)%2==0){sum1=SUM(low,mid);sum2=SUM(mid+1,high);printf("硬幣%d-%d和硬幣%d-%d稱重一次:",low,mid,mid+1,high);}else {sum1=SUM(low,mid-1);sum2=SUM(mid+1,high);printf("硬幣%d-%d和硬幣%d-%d稱重一次:",low,mid-1,mid+1,high);}if(sum1==sum2) {printf("兩者重量相同\n");return mid;}else if(sum1<sum2){printf("前者重量輕\n");if((high-low+1)%2==0) return solve(low,mid); else return solve(mid+1,high);}else {printf("后者重量輕\n");return solve(mid+1,high);} } int main(){int n=12;for(int i=0;i<12;i++){a[i]=2;}srand((unsigned)time(NULL));a[rand()%n]=1;printf("求解過程:");printf("硬幣%d是假幣\n",solve(0,n-1)); }三分
#include<stdio.h> #include<stdlib.h> #include<time.h> #define MAX 102 int a[MAX]; int n; int SUM(int low,int high){int sum=0;for(int i=low;i<=high;i++){sum+=a[i];}return sum; } int solve(int low,int high){int sum1,sum2;if(low==high){return low;}if(low==high-1){if(a[low]<a[high]) return low;else return high;}else if(low==high-2){printf("硬幣%d和硬幣%d稱重一次:",low,low+1);sum1=a[low];sum2=a[low+1];if(sum1<sum2){printf("硬幣%d重量輕\n",low);return low;} else if(sum1>sum2) {printf("硬幣%d重量輕\n",low+1);return low+1;}else {printf("兩者重量相同\n");return low+2;}}int len=(high-low+1)/3;int mid1=low+len-1;int mid2=mid1+len;sum1=SUM(low,mid1);sum2=SUM(mid1+1,mid2);printf("硬幣%d-%d和硬幣%d-%d稱重一次:",low,mid1,mid1+1,mid2);if(sum1<sum2){printf("前者重量輕\n");return solve(low,mid1);} else if(sum1>sum2) {printf("后者重量輕\n");return solve(mid1+1,mid2);}else {printf("兩者重量相同\n");return solve(mid2+1,high);} } int main(){int n=100;for(int i=0;i<n;i++){a[i]=2;}srand((unsigned)time(NULL));a[rand()%n]=1;printf("求解過程:");printf("硬幣%d是假幣\n",solve(0,n-1)); }回溯
#include<stdio.h> #include<string.h> #include<string> using namespace std;int w[12]; string a[3]={"ABCD","ABCI","ABIJ"}; string b[3]={"EFGH","EFJK","EFGH"}; string c[]={"even","up","even"}; bool Balanced(){for(int i=0;i<3;i++){int leftw=0;int rightw=0;for(int j=0;j<a[i].size();j++){leftw+=w[a[i][j]-'A'];rightw+=w[b[i][j]-'A'];}if(leftw<rightw&&c[i]!="down") return false;if(leftw>rightw&&c[i]!="up") return false;if(leftw==rightw&&c[i]!="even") return false;}return true; } void solve(int &x,int &y){for(int i=0;i<12;i++){w[i]=1;if(Balanced()){x=i;y=1;return ;}w[i]=-1;if(Balanced()){x=i;y=-1;return ;}w[i]=0;} } int main(){memset(w,0,sizeof(w));int x,y;solve(x,y);printf("求解結果:\n");printf("假幣是%c\n",x+'A');if(y==1) printf("該硬幣較真幣重量重\n");else printf("該硬幣較真幣重量輕\n"); }看到陳凱歌導演評價董思怡:繼續本色出演吧!
不禁感慨,每個人來到世界上,就是要活出內在的自己,活出自己的本性,隨心而行,自然會像樹和花、像鳥和魚,生長綻放,如魚得水,自在飛翔。
總結
- 上一篇: 读《创业36条军规》(七)领导要有预见性
- 下一篇: 用PS修改简历模板