毛概多项选择题答案统计程序

临近毛概考试,一位神师兄(还是说是师姐)祭出了一篇刷题神器:

华南理工大学2011年毛概多项选择题统计http://blog.renren.com/share/307533641/13556813269?from=0101010202&ref=minifeed&sfet=102&fin=0&ff_id=307533641

数据通过手工统计得到..
于是蛋疼之下用c++实现了这个统计过程:数据源:由毛概辅导书客观题.doc得到的答案集data.txt形如:.【B  P1】  2.【C  p12】 3.【A  P11】 4.【A  P20】5.【C  P20】 6.【D  P20】
7.【D  P21】 8.【B  P26】 9.【A  p31】10.【C  p32】11.【D  p34】
(二)多项选择题
1.【ABC  P4】2.【AC  P6】3.【CD  P6】4.【BCD  P8】5.【BC  P12】
6.【AD  P14】7.【ACD  P17】 8.【ACD  P19】9.【ABCD  P22】10.【ABCD  】
11.【ABC  P25】12.【ABCD  P26】13.【ABCD  P26】14.【ABCD  P28】15.【ABCD  P30】
16【ABCD  P30】17【ABCD  P31】18.【ABC  P34】
1【BC  P37】  2【AB  P38】 3【AC  P40】4【ABCD  P40】5【ABCD  P41】
6【ACD  P41】7【 ABD  P44】  8【BCD  P45】9【 ABD  P46】10【ABCD P47】
11【ABCD P48】12【ABCD P48】 13【 ABC P49】14【ABCD P51】15【 ABC p52】
1【A  P38】2【A  p38】3【B  p39 】4【A  P39】5【 B  P40】6【C  P40】
7【C  P41】8【C  P43】  9【 A  P43】10【D  P43】11【B  p43】
12【D  p43】13【B  P44】14【D  p46】15 【C  P50】16【B  p50】
1、(A)P57   2、(C)P58    3、(C)P57    4、(A)P58    5、(D)P59
6、(B)P59   7、(B)P60    8、(D)P61    9、(A)P62    10、(A)P58
  11、(D)P62   12、(C)P62   13、(A)P62   14、(D)P62   15、(C)P62
  16、(B)P64   17、(B)P65   18、(D)P67   19、(A)P67   20、(B)P70
  21、(C)P67   22、(A)P66   23、(B)P66   24、(A)P67  25、(D)P67
1、(AB)P58   2、(ABC)P58   3、(ABCD)P63   4、(AB)P67   5、(ABD)P68
6、(ACD)P69   7、(BCD)P70    8、(AB)P71    9、(ABD)P72
10、(ABCD)P73   11、(AC)P68    12、(ABD)P62
1、(C)P83    2、(B)P82    3、(D)P81    4、(D)P82    5、(A)P83
6、(A)P83    7、(A)P84    8、(C)P83    9、(A)P82    10、(C)P95

......

代码:

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	ifstream fin("data.txt", ios::in);
	
	if(!fin){
		cout<<"file error!"<<endl;
		system("pause");
		return 0;
	}
	string line, temAnswer;
	string CompareSet[] = {"ABCD", "ABC", "ABD", "ACD", "BCD", "AB", "AC", "AD", "BC", "BD",
		"CD", "A", "B", "C", "D"};
	int Counter[15];
	for(int iter = 0; iter != 15; ++iter)
		Counter[iter] = 0;

	int wordsNum = 0, TotalNum_MultiCase = 0, TotalNum_SingleCase = 0;
	bool latter, now;
	while(!fin.eof()){
		getline(fin, line);

		string::iterator new_end = remove_if(line.begin(), line.end(), bind2nd(equal_to<char>(), ' '));
		line.erase(new_end, line.end());
		wordsNum = line.size();
		
		temAnswer.clear();
		latter = false;
		for(int iter = 0; iter != wordsNum; ++iter){
			if(line[iter] == 'A' || line[iter] == 'B'
				|| line[iter] == 'C' || line[iter] == 'D'){
				now = true;
			}
			else{
				now = false;
			}

			if(now){
				temAnswer.push_back(line[iter]);
			}
			if(latter && !now){
				for(int r = 0; r != 15; ++r){
					if(temAnswer == CompareSet[r]){
						++Counter[r];
						if(r >= 11)
							++TotalNum_SingleCase;
						else
							++TotalNum_MultiCase;
						break;
					}
				}
				temAnswer.clear();
			}
			latter = now;
		}
	}

	cout<<"Finish Read Data"<<endl;
		

	cout<<"The Total Number of MultiCase_Answers is "<<TotalNum_MultiCase<<endl;
	for(int iter = 0; iter != 11; ++iter){
		cout<<CompareSet[iter]<<" : "<<Counter[iter]<<" Rate : "
			<<static_cast<double>(Counter[iter]) / TotalNum_MultiCase * 100<<" 10^-2"<<endl;
	}
	cout<<endl;
	cout<<"The Total Number of SingleCase_Answers is "<<TotalNum_SingleCase<<endl;
	for(int iter = 11; iter != 15; ++iter){
		cout<<CompareSet[iter]<<" : "<<Counter[iter]<<" Rate : "
			<<static_cast<double>(Counter[iter]) / TotalNum_SingleCase * 100<<" 10^-2"<<endl;
	}
	system("pause");
}

这是运行结果,与原文统计的频率相仿。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值