海盗分金问题C++代码

xxy220543 10年前

海盗分金问题.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;    }