zoukankan      html  css  js  c++  java
  • 黄金点游戏

    结对编程:黄金点游戏

    什么是黄金点游戏?

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

          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;
    }

     总结:

    此代码是一个小游戏 人多一点才好玩才能更容易发现有意思的现象 这是我们的一个结对编程项目 有我和我同学两个人共同完成 代码借鉴于网上 然后我们稍加修改而成

    好好学习 天天向上 继续努力

  • 相关阅读:
    洛谷 P1337 [JSOI2004]平衡点 / 吊打XXX 解题报告
    牛客练习赛 小D的剑阵 解题报告
    牛客练习赛 小A与最大子段和 解题报告
    牛客练习赛 小D的Lemon 解题报告
    牛客练习赛 小A与任务 解题报告
    洛谷 P1452 Beauty Contest 解题报告
    洛谷 P4100 [HEOI2013]钙铁锌硒维生素 解题报告
    【模板】矩阵求逆
    洛谷 P4097 [HEOI2013]Segment 解题报告
    连接数据库的增删改查
  • 原文地址:https://www.cnblogs.com/MaggieW/p/7660046.html
Copyright © 2011-2022 走看看