海盜分金問題C++代碼

xxy220543 9年前發布 | 18K 次閱讀 OPEN 代碼 C/C++開發

海盜分金問題.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;

}





  


 本文由用戶 xxy220543 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!