대충 3.3프로 / 3.6프로 / 4프로 걸면 번다는글

아래는 코드


#include

#include

#include

#include

using namespace std;

struct data{

    double a,b,c;

    int w;

    bool operator < (data a) const{

        return w>a.w;

    }

};

vector V,nV;

void print(){

    for(int i=0;i<10;i++) printf("%lf %lf %lf %d\n",V[i].a,V[i].b,V[i].c,V[i].w);

}

int main(){

    srand(time(NULL));

    printf("랜덤 설정\n");

    for(int i=0;i<10000;i++){

        V.push_back({(rand()%50)/(double)10,(rand()%50)/(double)10,(rand()%50)/(double)10,0});

    }

    print();

    printf("초기 조건 설정\n");

    int t=100;

    while(t--){

        for(int i=0;i<10000;i++){

            V[i].w=100000;

            for(int k=0;k<100;k++){

                int m=100000;

                for(int j=0;j<10&&m>=3000;j++){

                  int a=m*V[i].a/(double)100,b=m*V[i].b/(double)100,c=m*V[i].c/(double)100;

                  m-=a+b+c;

                  int tmp=rand()%101;

                  if(tmp==100) continue;

                   double r=tmp/(double)100;

                  m+=2*a*r+4*b*r*r+8*c*r*r;

               }

               V[i].w=min(V[i].w,m-100000);

            }

            int k=1;

        }

        sort(V.begin(),V.end());

        print();

        nV.clear();

        for(int i=0;i<10000;i++){

            int a=rand()%100,b=rand()%100;

            nV.push_back({(V[a].a+V[b].a)/2,(V[a].b+V[b].b)/2,(V[a].c+V[b].c)/2,0});

            nV[i].a+=nV[i].a*(rand()%5-2)/(double)100;

            nV[i].b+=nV[i].b*(rand()%5-2)/(double)100;

            nV[i].c+=nV[i].c*(rand()%5-2)/(double)100;

        }

        V.clear();

        V=nV;

        printf("%d: 반복함\n",100-t);

    }

    return 0;