x 단위로 숫자를 배포 할 방법을 찾고 있습니다. 이 단어를 어떻게 쓰는지 모르겠으므로 예제를 드리겠습니다.토너먼트 시스템에 대한 상품 배포
총상금이 $ 1000 인 토너먼트가 있습니다. 나는 상위 20 위너/참가자가 그 중 하나에서 우승 할 수 있기를 바랍니다.
나는 수학적 알고리즘/수식을 필요로한다.이 알고리즘/수식은 그 선수들 사이에서 그것을 분산시킬 것이고, 분배의 다른 요인을 제어 할 수있는 힘을 준다.
예를 들어, 1 위를 차지한 승자가 300 달러를 받길 원합니다. 상위 2 위 승자는 그 중 적은 비율을 차지합니다. 총 분포는 적어도 X $를 얻는 상위 20 위 (마지막 것)까지 모두에게 무언가를 제공해야합니다.
X $는 제가 제어하고자하는 또 다른 요소입니다.
아이디어가 있으십니까? 이 문제는 이름이 있습니까 (그리고 그 이름은 무엇입니까?)? 모든 코드 예제?
편집 # 1 - 처음 제안 : 이것은 지금까지 내가 도달 할 수 같습니다
#include <conio.h>
#include <vector>
#define TOTAL 100
#define WINNERS 15
#define FIRST_WINNER_PERCENTAGE 0.30
void distribute_1(::std::vector<double> * const prizes)
{
prizes->clear();
double total = TOTAL;
double winning_percentage = FIRST_WINNER_PERCENTAGE;
double slope = 0.5;
int winners = WINNERS;
double winning = 0;
for(int i = 0; i < winners; i++, total -= winning, winning_percentage /= 2)
{
winning = total * winning_percentage;
prizes->push_back(winning);
}
}
void distribute_2(::std::vector<double> * const prizes)
{
prizes->clear();
double total = TOTAL;
double winning_percentage = FIRST_WINNER_PERCENTAGE;
double slope = 0.5;
int winners = WINNERS;
double winning = 0;
for(int i = 0; i < winners; i++, total -= winning/*, winning_percentage /= 2*/)
{
winning = total * winning_percentage;
prizes->push_back(winning);
}
}
void distribute_3(::std::vector<double> * const prizes)
{
prizes->clear();
double total = TOTAL;
double winning_percentage = FIRST_WINNER_PERCENTAGE;
double slope = 0.0005;
int winners = WINNERS;
double winning = 0;
for(int i = 0; i < winners; i++, total -= winning, winning_percentage -= slope)
{
winning = total * winning_percentage;
prizes->push_back(winning);
}
}
void distribute_4(::std::vector<double> * const prizes)
{
prizes->clear();
double total = TOTAL;
double winning_percentage = FIRST_WINNER_PERCENTAGE;
double slope = 1/WINNERS;
int winners = WINNERS;
double winning = 0;
for(int i = 0; i < winners; i++, total -= winning, winning_percentage -= slope)
{
winning = total * winning_percentage;
prizes->push_back(winning);
}
}
void main()
{
::std::vector<double> prizes;
distribute_1(&prizes);
distribute_2(&prizes);
distribute_3(&prizes);
distribute_4(&prizes);
double total_granted = 0;
for(int i = 0; i < WINNERS; i++)
{
total_granted += prizes[i];
printf("%lf\n", prizes[i]);
}
printf("-\n%lf\n", total_granted);
_getch();
}
. 이 문제는 예를 들어, 'WINNERS'를 5로 설정하면 알고리즘이 '총'(이 예에서는 100) 또는 더 가까이 (총 83 개)에 도달하지 못하는 경우입니다. .
Cristy의 솔루션 :
#include <conio.h>
#include<iostream>
//using arithmetic progression
using namespace std;
int i;
float ratio;
float first_prize;
float s;
int main()
{
float money=1000;
const int total_prizes = 10;
float last_prize = 99;
float prizes[total_prizes+1];
/**/first_prize=2*money/total_prizes-last_prize; //last member of the progresion
ratio=(first_prize-last_prize)/(total_prizes-1);
prizes[total_prizes]=last_prize;
for(i=total_prizes-1;i>=1;i--){
prizes[i]=prizes[i+1]+ratio;
money-=prizes[i];
}
for(i=1;i<=total_prizes;i++){
printf("%d) %.2f\n",i,prizes[i]);
s+=prizes[i];
}
printf("TOTAL SUM:%.2f\n",s);
printf("Ratio: %.2f", ratio);
_getch();
}
더 많은 제약이 없으면 알고리즘을 정의 할 수 없습니다! 어떤 종류의 배포판을 원하십니까? 선의? 이차성? 다른 것? –
문자 그대로 수많은 방법으로이 작업을 수행 할 수 있으며이 단계에서는 실제로 프로그래밍 관련 질문이 아닙니다. 또한 – torak
, 위에서 언급 한 두 가지 요소는 나는 내가 "기세"로 정의 할 또 다른 요소를 제어하고 싶습니다 외에 다음 # 20 (마지막)로 1 위 수상자에서, 경품은 줄일 수있는 스테핑. – Poni