海盗分金问题C++代码
xxy220543
9年前
海盗分金问题.cpp :
#include "stdafx.h" #include<iostream> using namespace std; #include<vector> #include<algorithm> struct record{ int i; int value; record(int ii,int v):i(ii),value(v){ } }; int findSmallInVector(vector<record>&mm,int n){ int min=0; for(int i=0;i<n;i++){ if(mm[i].value<mm[min].value){ min=i; } } return min; }; int findmaster(int a[],int n){ int min=0; for(int i=0;i<n;i++){ if(a[i]<a[min]){ min=i; } } return min; }; void pirateShareGold(int a[],int n){ if(n==1||n==2) { return; } else if(n==3){ } else{ for(int i=2;i<n;i++){ int count=0; vector<record> mm; for(int m=0;m<i-1;m++) { mm.push_back(record(m,a[m])); } while(count<i/2.00){ int x=findSmallInVector(mm,i-count-1); a[mm[x].i]+=1; mm.erase(mm.begin()+x); count++; }//while int yy=0; if(i==n-1){ for(auto ib=mm.begin();ib!=mm.end();ib++,yy++){ a[mm[yy].i]=0; } } }//for } }; struct xxy{ void operator()(int& a){ a=0; } }; int _tmain(int argc, _TCHAR* argv[]) { int num; cin>>num; int*a=new int[num]; for_each(a,a+num,xxy()); pirateShareGold(a,num); a[num-1]=100; for(int i=0;i<num-1;i++) { a[num-1]-=a[i]; } for(int i=0;i<num;i++){ cout<<a[i]<<ends; } system("pause"); return 0; }