¢¨Íýͳ¤Ï¤ï¤«¤ê¤Þ¤»¤ó¤¬for¥ë¡¼¥×Æâ¤ÎȾ³Ñ'<'¤¬²½¤±¤ë¤Î¤Ç¡¢¤½¤³¤ÏÁ´³Ñ'¡ã'¤ËÃÖ´¹¤·¤Æ¤Þ¤¹¡£Â¾¤Ë¤â²½¤±¤Æ¤ë¤È¤³¤í¤¬¤¢¤ë¤«¤â¡¦¡¦¡¦
#include "stdafx.h"
// Team̾ÄêµÁ
enum{
CHOOP = 0,
ASAI,
FANTA,
GATAS,
TEAM_NUM
};
// ¾¡ÇÔȽÄê¥Ñ¡¼¥»¥ó¥Æ¡¼¥¸
#define PER_TEAMA_WIN (0.35) // TeamA¾¡Íø³ÎΨ35%
#define PER_TEAMB_WIN (0.35) // TeamB¾¡Íø³ÎΨ35%
#define PER_DRAW (0.3) // °ú¤Ê¬¤±³ÎΨ30%
// »Ä»î¹ç¿ô
#define MATCH_NUM (12)
// ÂÐÀïɽ
int nMatch[MATCH_NUM*2] = {
CHOOP, ASAI,
CHOOP, ASAI,
CHOOP, FANTA,
CHOOP, FANTA,
CHOOP, GATAS,
CHOOP, GATAS,
ASAI, FANTA,
ASAI, FANTA,
ASAI, GATAS,
ASAI, GATAS,
FANTA, GATAS,
FANTA, GATAS,
};
//ºÇ½ªÅª¤Ê½ç°Ì²ÄǽÀ
double FinalPossibility[TEAM_NUM][TEAM_NUM];
// ¥ï¡¼¥¯¹½Â¤ÂÎ
typedef struct{
int nPoint[TEAM_NUM]; // ¾¡¤ÁÅÀ
int nMargin[TEAM_NUM]; // ÆÀ¼ºÅÀº¹
int nGoal[TEAM_NUM]; // ÁíÆÀÅÀ
double possibility;
}POINT;
int nMatchCounter; // ¥·¥ß¥å¥ì¡¼¥È¿ô¥«¥¦¥ó¥¿
int nMatchCounter_ign;
// ½ç°Ì·èÄê´Ø¿ô
void CountResult(POINT *pPoint)
{
int nSort[TEAM_NUM];
int nI, nJ, tmp;
nSort[0] = CHOOP;
nSort[1] = ASAI;
nSort[2] = FANTA;
nSort[3] = GATAS;
// ¾¡¤ÁÅÀ¡¢ÆÀ¼ºÅÀº¹¡¢ÁíÆÀÅÀ¤ÎÍ¥ÀèÅ٤ǥ½¡¼¥È
for ( nI=0; nI¡ãTEAM_NUM-1; nI++){
for ( nJ=nI+1; nJ¡ãTEAM_NUM; nJ++){
if ( pPoint->nPoint[nSort[nI]] < pPoint->nPoint[nSort[nJ]] ){
tmp = nSort[nI];
nSort[nI] = nSort[nJ];
nSort[nJ] = tmp;
}
else if ( pPoint->nPoint[nSort[nI]] == pPoint->nPoint[nSort[nJ]] ){ // ¾¡¤ÁÅÀ¤¬Æ±¤¸
if ( pPoint->nMargin[nSort[nI]] < pPoint->nMargin[nSort[nJ]] ){
tmp = nSort[nI];
nSort[nI] = nSort[nJ];
nSort[nJ] = tmp;
}
else if ( pPoint->nMargin[nSort[nI]] == pPoint->nMargin[nSort[nJ]] ){ // ¾¡¤ÁÅÀ¡¢ÆÀ¼ºÅÀº¹¤¬Æ±¤¸
if ( pPoint->nGoal[nSort[nI]] < pPoint->nGoal[nSort[nJ]] ){
tmp = nSort[nI];
nSort[nI] = nSort[nJ];
nSort[nJ] = tmp;
}
else if ( pPoint->nGoal[nSort[nI]] == pPoint->nGoal[nSort[nJ]] ){ // ¾¡¤ÁÅÀ¡¢ÆÀ¼ºÅÀ¡¢ÁíÆÀÅÀ¤¬Æ±¤¸
pPoint->possibility = 0;
nMatchCounter_ign++;
}
}
}
}
}
// ½ç°Ì²ÄǽÀÊÑ¿ô¤Ë²Ã»»
FinalPossibility[0][nSort[0]] += pPoint->possibility;
FinalPossibility[1][nSort[1]] += pPoint->possibility;
FinalPossibility[2][nSort[2]] += pPoint->possibility;
FinalPossibility[3][nSort[3]] += pPoint->possibility;
nMatchCounter++;
}
// ¢¨¥ê¥«¡¼¥·¥Ö
// ·ë²Ì¥·¥ß¥å¥ì¡¼¥È¥á¥¤¥ó
void Simulate(int nDepth, POINT point)
{
int nTeamA, nTeamB;
int nPointA, nPointB;
int nMarginA, nMarginB;
int nGoalA, nGoalB;
double possibility;
// ¥Ç¡¼¥¿¥Ð¥Ã¥¯¥¢¥Ã¥×
nTeamA = nMatch[(nDepth-1)*2];
nTeamB = nMatch[(nDepth-1)*2+1];
nPointA = point.nPoint[nTeamA];
nPointB = point.nPoint[nTeamB];
nMarginA = point.nMargin[nTeamA];
nMarginB = point.nMargin[nTeamB];
nGoalA = point.nGoal[nTeamA];
nGoalB = point.nGoal[nTeamB];
possibility = point.possibility;
// TeamA¤¬1-0¾¡Íø
point.nPoint[nTeamA] = nPointA + 3;
point.nPoint[nTeamB] = nPointB;
point.nMargin[nTeamA] = nMarginA + 1;
point.nMargin[nTeamB] = nMarginB - 1;
point.nGoal[nTeamA] = nGoalA + 1;
point.nGoal[nTeamB] = nGoalB;
point.possibility = possibility * PER_TEAMA_WIN;
if ( nDepth == MATCH_NUM ){ // ºÇ½ªÀï
CountResult(&point); // ·ë²Ì½¸·×
}
else{
Simulate(nDepth+1, point); // ¥ê¥«¡¼¥·¥Ö
}
// TeamB¤¬£±ÅÀº¹¾¡Íø
point.nPoint[nTeamA] = nPointA;
point.nPoint[nTeamB] = nPointB + 3;
point.nMargin[nTeamA] = nMarginA - 1;
point.nMargin[nTeamB] = nMarginB + 1;
point.nGoal[nTeamA] = nGoalA;
point.nGoal[nTeamB] = nGoalB + 1;
point.possibility = possibility * PER_TEAMB_WIN;
if ( nDepth == MATCH_NUM ){ // ºÇ½ªÀï
CountResult(&point); // ·ë²Ì½¸·×
}
else{
Simulate(nDepth+1, point); // ¥ê¥«¡¼¥·¥Ö
}
// 1-1¤Ç°ú¤Ê¬¤±
point.nPoint[nTeamA] = nPointA + 1;
point.nPoint[nTeamB] = nPointB + 1;
point.nMargin[nTeamA] = nMarginA;
point.nMargin[nTeamB] = nMarginB;
point.nGoal[nTeamA] = nGoalA + 1;
point.nGoal[nTeamB] = nGoalB + 1;
point.possibility = possibility * PER_DRAW;
if ( nDepth == MATCH_NUM ){ // ºÇ½ªÀï
CountResult(&point); // ·ë²Ì½¸·×
}
else{
Simulate(nDepth+1, point); // ¥ê¥«¡¼¥·¥Ö
}
}
// ¥á¥¤¥ó
int main(int argc, char* argv[])
{
POINT point;
int nI, nJ;
// ¸½ºß¤Î¾õ¶·
// ¾¡¤ÁÅÀ
point.nPoint[CHOOP] = 16;
point.nPoint[ASAI] = 15;
point.nPoint[FANTA] = 14;
point.nPoint[GATAS] = 10;
// ÆÀ¼ºÅÀº¹
point.nMargin[CHOOP] = 3;
point.nMargin[ASAI] = 5;
point.nMargin[FANTA] = 5;
point.nMargin[GATAS] = 1;
// ÁíÆÀÅÀ
point.nGoal[CHOOP] = 9;
point.nGoal[ASAI] = 13;
point.nGoal[FANTA] = 8;
point.nGoal[GATAS] = 8;
// ¤½¤Î¾½àÈ÷
point.possibility = 1.0;
nMatchCounter = 0;
nMatchCounter_ign = 0;
for ( nI=0; nI¡ãTEAM_NUM; nI++){
for ( nJ=0; nJ¡ãTEAM_NUM; nJ++){
FinalPossibility[nI][nJ] = 0.0;
}
}
// £±»î¹çÌܤ«¤é¥·¥ß¥å¥ì¡¼¥·¥ç¥ó¼Â¹Ô
Simulate(1, point);
// ºÇ½ª·ë²Ì½ÐÎÏ
printf("CHOOP\n");
for ( nI=0; nI¡ãTEAM_NUM; nI++){
printf("%d°Ì³ÎΨ : %f \n", nI+1, FinalPossibility[nI][CHOOP]);
}
printf("\n");
printf("ASAI RED ROSE\n");
for ( nI=0; nI¡ãTEAM_NUM; nI++){
printf("%d°Ì³ÎΨ : %f \n", nI+1, FinalPossibility[nI][ASAI]);
}
printf("\n");
printf("FANTASISITA\n");
for ( nI=0; nI¡ãTEAM_NUM; nI++){
printf("%d°Ì³ÎΨ : %f \n", nI+1, FinalPossibility[nI][FANTA]);
}
printf("\n");
printf("Gatas\n");
for ( nI=0; nI¡ãTEAM_NUM; nI++){
printf("%d°Ì³ÎΨ : %f \n", nI+1, FinalPossibility[nI][GATAS]);
}
printf("¥·¥ß¥å¥ì¡¼¥ÈÁí¿ô%d : ¡Ê½ü³°%d¡Ë\n", nMatchCounter, nMatchCounter_ign);
getchar();
return 0;
}
- 2005/01/01(ÅÚ) 11:54:27|
- ̤ʬÎà|
-
¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¡§0|
-
¥³¥á¥ó¥È¡§0