黄金点作业

#include <iostream>

#include<math.h>

using namespace std;

void main()

{
    
    int i, j, num,  M, S[100], S2[100], S3[100] = { 0};
    
    double S1[100], ave,sum,G;
    
    double max, min;
    
    cout << "==============欢迎进入黄金点游戏!=============" << endl;
    
    cout << "============== HELP ==============" << endl;
    
    cout << "=========N个玩家(N通常大于10)进行游戏=========" << endl;
    
    cout << "==每人写一个0~100之间的有理数 (不包括0或100)==" << endl;
    
    cout << "===========G=N位玩家平均值*0.618==============" << endl;
    
    cout << "======最高分(N): 提交数字最接近G值的玩家======" << endl;
    
    cout << "=====最低分(-2):提交数字距离G值最远的玩家=====" << endl;
    
    cout << "===========其他分(0): 其他所有玩家============" << endl;
    
    cout << "请输入玩家人数:" << endl;
    
    cin >> M;
    
    for (i = 1; i <= M; i++)
        
    {
        sum = 0;
        
        G = 0;
        
        cout << "Input the number between 1 to 100." << endl;
        
        for (j = 1; j <= M; j++)
            
        {
            
            cout <<" Player " << j << " input your choose!" << endl;
            
            cin >> num;
            
            S[j] = num;
            
            sum = sum + S[j];//S[J]存放每个人输入的数字
            
        }
        
        ave = sum / num;
        
        G = ave*0.618;
        
        cout << "黄金点是G=" << G << endl;
        
        for (j = 1; j <= M; j++)
            
        {
            
            S1[j] = abs(S[j] - G);//abs求绝对值,求出来的值放在s1[j]里
            
        }
        
        max = min = S1[1];//第一个求出来的绝对值作为参考,赋值给max,min
        
        for (j = 1; j <= M; j++)
            
        {
            
            if (S1[j] >= max)
                
                max = S1[j];
            
            else if (S1[j] < min)
                
                min = S1[j];
            
        }
        
        for (j = 1; j <= M; j++)
            
        {
            
            if (S1[j] == max)
                
                S2[j] = -2;
            
            else if (S1[j] == min)
                
                S2[j] = M;
            
            else S2[j] = 0;
            
            
            
        }
        
        for (j = 1; j <= M; j++)
            
        {
            
            cout << "本轮分数" << "S2[" << j << "]=" << S2[j] << endl;//s2[]存放本轮分数
            
            S3[j] = S3[j] + S2[j];
            
            cout << "总分数 " << "S3[" << j << "]=" << S3[j] << endl;//s3[]存放总分数
            
        }
        
    }
    
    system("pause");
    
}

  这个黄金点实验是我们的结对编程的第一个实验。
      黄金点游戏规则:N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。代码的运行环境是Visual C++ 6.0,代码实现的平台为win7。程序可以实现多轮游戏的进行,也会累积分数,会显示本轮分数和总分数。这次试验也让我们看到了很多不足,回继续努力,弥补不足的。
github:https://github.com/liu201510411116/hello-world/blob/master/huangjindian.cpp

posted @ 2017-10-11 14:34  liuyelin  阅读(233)  评论(0编辑  收藏  举报