模拟player成绩统计

原创 2006年06月04日 14:36:00

原始要求:

对参赛结果分数进行处理:参赛选手n人(n>1),评委m人(m>2),评委给每一选手打一个分数score(分数score为小于等于10的一个正实数)。选手的最后得分lastScore计算方法为

1m<9时,去掉一个最高分和一个最低分后另m-2个得分的平均值。

2m9时,去掉两个最高分和两个最低分后另m-4个得分的平均值。

假设事先已经建立了text型的数据文件f1.txt,其中依次记录着n个选手的编号(一个正整数)、姓名(一个字符串)以及m个评委给出的得分。

请编制程序,依次从数据文件f1.txt中读入n个选手的有关信息,而后按上述规定方法计算出每一个选手的最后得分,而且往屏幕上以及另一个text型文件f2.txt中同时输出如下形式的结果信息。

假设参赛选手人数n=5,评委人数m=7,磁盘文件f1.txt中的初始数据为:

1 zhangjin 8.8 9.3 7.9 8.7 8.9 9.7 9.2

2 lintao 8.9 8.2 8.6 8.8 8.5 9.1 9.3

3 guojian 8.9 8.4 8.7 8.6 8.6 8.4 8.6

4 maling 7.9 8.3 8.5 8.6 8.5 8.9 8.3

5 liuyifan 9.5 9.1 9.8 9.2 9.0 9.5 8.9
那么,程序执行后,屏幕显示结果以及磁盘文件f2.txt中的结果均应该为:
----------------------------------------------------------
 
参赛号    姓 名     最高分    最低分   累积分    最后得分
----------------------------------------------------------
     1  zhangjin       9.7       7.9      44.9        8.98
     2    lintao       9.3       8.2      43.9        8.78
     3   guojian       8.9       8.4      42.9        8.58
     4    maling       8.9       7.9      42.2        8.44
     5  liuyifan       9.8       8.9      46.3        9.26
----------------------------------------------------------

以下是代码部分:

/*编译环境为VC 2005,如果在VC 6.0下运行,需要稍作修改才能通过编译*/

#include <iostream>
#include <fstream>
using namespace std;

struct player
{
 int number;
 char name[40];
 double * score;
};

void Sort(double * s, int n); // 排序函数
double Total(double * s, int n); // 计算总分(去掉最低分和最高分)
double Average(double * s, int n);  // 计算最终成绩函数

int main()
{

/*文件打开操作*/

 ifstream fin;
 fin.open("f1.txt");
 if (fin.fail())
 {
  cout << "文件读取失败..." << endl;
  exit(0);
 }

/*读入数据,并分析出数据总行数与每个选手分数的个数(列数)*/

 int rows = 0;
 int cols = 0;
 char temp;
 while (!fin.eof())
 {
  temp = fin.get();
  if (temp == '/n') // 以回车判定行数,文件最后一行数据一定要以/n结束,否则会出错!
   rows++;
  else if (temp == '.') // 以.判定有多少位裁判给分(总计)
   cols++;
 }
 cols /= rows; // 每位选手有多少个分数

/*为player结构分配空间,然后存入相应数据*/

 player * list = new player[rows];
 for (int i = 0; i < rows; ++i)
  list[i].score = new double[cols];
 fin.clear();
 fin.close();
 fin.open("f1.txt");
 if (fin.fail())
 {
  cout << "文件读取失败..." << endl;
  exit(0);
 }
 for (int i = 0; i < rows; ++i)
 {
  fin >> list[i].number;
  fin >> list[i].name;
  for (int j = 0; j < cols; ++j)
   fin >> list[i].score[j];
  fin.get(); // 屏蔽回车
 }
 fin.close();

/*整理player成绩,先进行排序,然后计算,最后输出到文件*/
 
 for (int i = 0; i < rows; ++i)
  Sort(list[i].score, cols);
 ofstream fout;
 fout.open("f2.txt");
 if(fout.fail())
 {
  cout << "文件建立失败...";
  exit(0);
 }
 fout << "-----------------------------------------------------------/n";
 fout << " 参赛号    姓 名    最低分    最高分    累计分    最后得分/n";
 fout << "-----------------------------------------------------------/n";
 fout.setf(ios_base::fixed);   // 格式控制
 for (int i = 0; i < rows; ++i)
 {
  fout.precision(1);
  fout.width(4);
  fout << list[i].number;
  fout.width(12);
  fout << list[i].name;
  fout.width(8);
  fout << list[i].score[0];
  fout.width(10);
  fout << list[i].score[cols - 1];
  fout.width(11);
  fout << Total(list[i].score, cols);
  fout.width(11);
  fout.precision(2);
  fout << Average(list[i].score, cols);
  fout << endl;
 }
 fout << "-----------------------------------------------------------/n";
 cout << "f2.txt文件成功建立。/n";
 return 0;
}

void Sort(double * s, int n) // 选择排序
{
 double temp;
 int pos;
 for (int i = 0;i < n - 1;++i)
 {
  temp = s[i];
  pos = i;
  for (int j = i + 1;j < n;j++)
  {
   if (s[j] < temp)
   {
     temp = s[j];
     pos = j;
   }
  }
  s[pos] = s[i];
  s[i] = temp;
 }
}

double Total(double * s, int n)
{
 double sum = 0;
 if (n < 9)
 {
  for (int i = 1; i < n - 1; ++i)
   sum += s[i];
  return sum;
 }
 else
 {
  for (int i = 2; i < n - 2; ++i)
   sum += s[i];
  return sum;
 }
}
  
double Average(double * s, int n)
{
 if (n < 9)
  return (Total(s, n) / (n - 2));
 else
  return (Total(s, n) / (n - 4));
}

相关文章推荐

R语言-模拟产生统计专业学生的成绩

现在Mayuyu会以一个例子来说明R语言在统计学中的应用。模拟一个高中学生语数外三科的成绩单。   首先认识两个重要的函数,source()和print(),source()函数是用来运行R脚本的,一...

UVa 131 The Psychic Poker Player (枚举&模拟好题)

131 - The Psychic Poker Player Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option...

基于VMware Player实现NAT网络模拟环境

基于VMware Player实现NAT网络模拟环境 胡佳辉 2012-10-26 http://blog.csdn.net/gobitan 摘要:测试需要NAT的网络环境。但如果没有相应的硬...
  • gobitan
  • gobitan
  • 2012年11月15日 12:27
  • 7677

UVA - 131 The Psychic Poker Player (暴力枚举+模拟)

The Psychic Poker Player  In 5-card draw poker, a player is dealt a hand of five cards (w...

【Android+OkHttp3+Jsoup】 模拟登录教务系统 抓取课表和成绩

今天这篇文章为大家带来的是这个项目的详细实现过程。这个程序基于Android平台,使用OkHttp3网络请求框架来模拟登录教务系统,然后利用Jsoup库来解析获取到的html代码,最后只要处理下数据将...

Android实现模拟登陆正方系统查成绩

Android实现模拟登陆正方系统查成绩相信有很多小伙伴的学校在使用的都是正方系统作为教务系统,在平时我们会图方便利用各种微信公众号、超级课程表之类的东西查成绩,今天就跟大家示范一下如何自己编码模拟登...

模拟登录学校的学生服务子系统查询成绩

期末查成绩很是不方便,总是页面还没有出来就超时了,所以自己写个任务,每十分钟查询一次,查询到成绩,将数据写进记事本。 原理: 第一步,访问验证码图片,获取验证码和sessionId,保存起...

老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.

import java.util.Scanner; import java.util.ArrayList;public class Main { public static void main...

蓝桥杯模拟赛第五场 - H. 成绩查询系统

题目:成绩查询系统 数学老师小y 想写一个成绩查询系统,包含如下指令: insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score。 fin...
  • EsauLu
  • EsauLu
  • 2017年04月02日 17:23
  • 197

【2015.10.17普及模拟】Oliver的成绩(score)

【2015.10.17普及模拟】Oliver的成绩(score)  题目:  Oliver进入初中后,觉得自己不能总是玩儿了,应该要好好学习了。正好一次考试结束了,Oliver想知道自己...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模拟player成绩统计
举报原因:
原因补充:

(最多只允许输入30个字)