1058 选择题 (20 分)

1058 选择题 (20 分)_第1张图片

这种题本身不难,但是题干超级无敌长,容易使人头晕眼花 ......

代码:

#include
using namespace std;
struct quesion {
	// 题号,本题的满分值,选项个数,正确选项个数,学生的错误次数
	int no,sc,optnum,rightnum=0,wrong_cnt=0;
	set opt;	//	*:review一下set的特性
} que[1001];
int cmp(quesion a, quesion b) {
	if(a.wrong_cnt!=b.wrong_cnt)
		return a.wrong_cnt>b.wrong_cnt;
	else return a.no>n>>m;	//	学生人数,多选题个数
	for(int i=0; i>que[i].sc>>que[i].optnum>>que[i].rightnum;
		que[i].no=i;
		for(int j=0; j>a;
			que[i].opt.insert(a);
		}
	}
	for(int i=0; i0) scanf(" ");
			scanf("(%d",&l);
			for(int k=0; k

总结:

1、set 是集合,⼀个 set 中的各元素各不相同,而且 set 会按照元素从小到大排序,用法:

set s; // 定义⼀个空集合s
s.insert(1); // 向集合s⾥⾯插⼊⼀个1
cout << *(s.begin()) << endl; // 输出集合s的第⼀个元素 (前⾯的星号表示要对指针取值)
/*
查找集合s中的值,
如果结果等于s.end()表示未找到 
(因为s.end()表示s的最后⼀个元素的下⼀个元素所在的位置)
*/
if(s.find('a')!=s.end())
    cout<<"能找到";

2、注意以下 scanf() 的用法:

scanf("("%d", &a);
scanf(")");

3、结构体数组、vector咋sort?

struct stu {
    int number; //学号
    int score;  //分数
}

bool cmp(stu a, stu b) { // cmp函数,返回值是bool,传⼊的参数类型应该是结构体stu类型
     if (a.score != b.score) // 如果学⽣分数不同,就按照分数从⼤到⼩排列
     return a.score > b.score;
     else // 如果学⽣分数相同,就按照学号从⼩到⼤排列
         return a.number < b.number;
}

sort(v.begin(), v.end(), cmp);
sort(array, array + 10, cmp);

提交记录:

1058 选择题 (20 分)_第2张图片

 做这样的题一定要仔细,头脑要清楚。

你可能感兴趣的:(PAT乙级,PAT乙级)