结对项目:黄金点游戏

结对编程:黄金点游戏

一、项目简介

 黄金点游戏是一个数字小游戏,其游戏规则是:

      N个同学,每人写一个有理数,交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。

二、项目功能

      用户自己输入游戏轮数和人数设定,在输入自己所写的数,然后程序自动运行得出分数

三、项目代码

#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("请输入游戏的人数:");

scanf("%d", &n); printf("\n");

printf("请输入此次游戏进行的轮数:");

scanf("%d", &game_num);

printf("\n");

while (game_num--)

{ ++temp; mp.clear();   //清空map中的数据

sum = 0; ave = 0; G = 0;

printf("第%d轮开始:\n", temp);

printf("请输入每人的姓名和有理数(空格隔开):\n");

for (i = 0; i<n; i++) {

cin >> name >> num;

if (num>0.0&&num<100.0)

{ mp[name] = num;   //建立map的关系 sum = sum + num; }

else { printf("请输入(0-100)的有理数\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点值:%.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 << "轮结果:" << endl;

cout << "姓名" << "\t" << "分数" << endl;

for (iter = mp.begin();iter != mp.end(); iter++)

cout << iter->first << "\t" << iter->second << endl;

cout << endl;

}

return 0;

}

 总结:本次项目为结对项目,由我和另一个同学一起设计完成。我们借鉴网上的代码再一起讨论如何改进提高,最后得到了初步的代码。在完成项目后我们也邀请了一些同学一起玩这个游戏,最终我们发现一些很有意思的现象,比如黄金点在逐渐地往下移动。

 

转载于:https://www.cnblogs.com/mini-222/p/7686623.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值