대충 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;