魔法

题面描述:
魔法部急缺一批魔法师,于是他们急急忙忙新招聘了一批魔法师,应聘魔法师在
他们上交的简历里写了各自的学历。学历仅包括初级魔法、中级魔法和高级魔法
三门课程的成绩情况,用百分制表达。如果一位魔法师在某门课程上及格(>=60
分)的话,他就能得到相应的职称并担任对应的职业。当然,有高级职称的人可以
担任低级职业。由于交上来的简历太多了,魔法部的负责人找到了你,想让你帮
忙计算,能担任初级、中级、高级魔法师的人分别有多少人?
输入数据:
输入数据第一行为一个正整数 T,表示测试数据的组数。接下来是 T 组测试数
据,每组测试数据的第一行为一个整数 n,表示简历份数,随后的 n 行中,每行
以低级、中级、高级的顺序表示三门课的成绩(1≤T≤100,1≤n≤1000, 0≤成绩 ≤100)。
输出数据:
对于每一组输入数据, 输出一行形如“Case #id: a b c”的结果, 表示第 id 组数据结
果是 a, b, c, id 从 1 开始, a, b, c 表示三种人的数量。
样例输入:
2
3
12 23 99
66 66 77
99 88 23
2
100 100 100
100 100 100
样例输出:
Case #1: 3 3 2
Case #2: 2 2 2
程序源码:

#include 
using namespace std;

int Evaluation(int nScore[3]);

int main() {
	int nId = 0;
	int nTerm = 0;
	int nOut[300] = { 0 }; 
	int *pInt = nOut;
	cin >> nId;
	for (int i = 0; i < nId; i++) {
		int nOneScore[3] = { 0 };
		int nNum[3] = { 0 };
		cin >> nTerm;
		for (int i = 0; i < nTerm; i++) {
			cin >> nOneScore[0] >> nOneScore[1] >> nOneScore[2];
			switch (Evaluation(nOneScore)) {
			case 3: {nNum[0]++; nNum[1]++; nNum[2]++; break; }
			case 2: {nNum[0]++; nNum[1]++; break; }
			case 1: {nNum[0]++; break; }
			default:;
			}
		}
		nOut[i * 3] = nNum[0];
		nOut[1 + i * 3] = nNum[1];
		nOut[2 + i * 3] = nNum[2];
	}
	for (int i = 0; i < nId; i++) {
		cout << "Case #" << (i + 1) << ": " ;
		for (int j = 0; j < 3; j++)
			cout << nOut[j + i * 3] << " ";
		cout << endl;
	}
	system("pause");
	return 0;
}

int Evaluation(int nScore[3]) {
	if (nScore[2] >= 60) {
		return 3;
	}
	else if (nScore[1] >= 60) {
		return 2;
	}
	else if (nScore[0] >= 60) {
		return 1;
	}
	else
		return 0;
}

你可能感兴趣的:(C++)