結(jié)對項目:黃金點(diǎn)游戲
結(jié)對編程:黃金點(diǎn)游戲
一、項目簡介
黃金點(diǎn)游戲是一個數(shù)字小游戲,其游戲規(guī)則是:
N個同學(xué),每人寫一個有理數(shù),交給裁判,裁判算出所有數(shù)字的平均值,然后乘以0.618(所謂黃金分割常數(shù)),得到G值。提交的數(shù)字最靠近G(取絕對值)的同學(xué)得到N分,離G最遠(yuǎn)的同學(xué)得到-2分,其他同學(xué)得0分。
二、項目功能
用戶自己輸入游戲輪數(shù)和人數(shù)設(shè)定,在輸入自己所寫的數(shù),然后程序自動運(yùn)行得出分?jǐn)?shù)
三、項目代碼
#include <iostream>
#include<stdio.h>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<map>
#include<math.h>
using namespace std;
int main()
{ int game_num;
map<string, double>mp;
int i, n;
double num, sum, ave, G;
int temp = 0;
string name;
printf("請輸入游戲的人數(shù):");
scanf("%d", &n); printf("\n");
printf("請輸入此次游戲進(jìn)行的輪數(shù):");
scanf("%d", &game_num);
printf("\n");
while (game_num--)
{ ++temp; mp.clear(); //清空map中的數(shù)據(jù)
sum = 0; ave = 0; G = 0;
printf("第%d輪開始:\n", temp);
printf("請輸入每人的姓名和有理數(shù)(空格隔開):\n");
for (i = 0; i<n; i++) {
cin >> name >> num;
if (num>0.0&&num<100.0)
{ mp[name] = num; //建立map的關(guān)系 sum = sum + num; }
else { printf("請輸入(0-100)的有理數(shù)\n"); i--; }
}
map<string, double>::iterator iter, result_high, result_low;
printf("總和為:%.4lf\n", sum);
ave = sum / n;
printf("平均值:%.4lf\n", ave);
G = ave*0.618;
printf("G點(diǎn)值:%.4lf\n", G);
for (iter = mp.begin();iter != mp.end(); iter++) {
iter->second = (double)fabs(G - (double)iter->second); //iter存的是差值
}
for (iter = mp.begin(), result_high = mp.begin(), result_low = mp.begin(); iter != mp.end(); iter++)
{ if (iter->second<result_high->second)
result_high = iter;
if (iter->second>result_low->second)
result_low = iter;
}
cout << endl;
cout << "姓名" << "\t" << "差值" << endl;
cout << result_high->first << "\t" << result_high->second << "\t" << "得到" << n << "分" << endl;
cout << result_low->first << "\t" << result_low->second << "\t" << "得到-2分" << endl;
cout << endl;
for (iter = mp.begin(); iter != mp.end(); iter++)
{ iter->second = 0; }
for (iter = mp.begin(); iter != mp.end(); iter++)
{ if (iter == result_high)
iter->second += n;
if (iter == result_low)
iter->second += -2; }
cout << "第" << temp << "輪結(jié)果:" << endl;
cout << "姓名" << "\t" << "分?jǐn)?shù)" << endl;
for (iter = mp.begin();iter != mp.end(); iter++)
cout << iter->first << "\t" << iter->second << endl;
cout << endl;
}
return 0;
}
總結(jié):本次項目為結(jié)對項目,由我和另一個同學(xué)一起設(shè)計完成。我們借鑒網(wǎng)上的代碼再一起討論如何改進(jìn)提高,最后得到了初步的代碼。在完成項目后我們也邀請了一些同學(xué)一起玩這個游戲,最終我們發(fā)現(xiàn)一些很有意思的現(xiàn)象,比如黃金點(diǎn)在逐漸地往下移動。
浙公網(wǎng)安備 33010602011771號