蓝桥杯—4

学习视频04-使用 sort 排序视频讲解(C++版)_哔哩哔哩_bilibili

S:学会使用sort,以及带有greater<int>()的形式

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int arr[5] = { 2,5,3,1,4 };
	sort(arr, arr + 5);
	for (int i = 0; i < 5; i++) {          //如果是char数组,可以用strlen(ch)
		cout << arr[i] << " ";
	}
	cout << endl;

	sort(arr, arr + 5, greater<int>());
		for (int i = 0; i < 5; i++) {          //如果是char数组,可以用strlen(ch)
			cout << arr[i] << " ";
		}
		cout << endl;
	return 0;
}

Q:平均数

int main() {
	int n;
	cin >> n;
	int fen[33] = { 0 };
	for (int i = 0; i < n; i++) {
		cin >> fen[i];
	}
	int k, sum = 0;
	cin >> k;
	sort(fen, fen + 30, greater<int>());
	for (int i = 0; i < k; i++) {
		sum += fen[i];
	}
	float avg = sum / k;
	printf("%.2f\n", avg);
	return 0;
}

Q:分数段统计

int main() {
	int n;
	cin >> n;
	int fen[33] = { 0 };
	for (int i = 0; i < n; i++) {
		cin >> fen[i];
	}
	sort(fen, fen + n, greater<int>());
	int b[6] = { 0 };
	for (int i = 0; i < n; i++) {
		if (fen[i] == 100)
			b[0]++;
		else if (fen[i] >= 90)
			b[1]++;
		else if (fen[i] >= 80)
			b[2]++;
		else if (fen[i] >= 70)
			b[3]++;
		else if (fen[i] >= 60)
			b[4]++;
		else
			b[5]++;
	}
	for (int i = 0; i < 6; i++)
		cout << b[i] << " ";
	return 0;
}

S:自定义排序方法

bool cmp(int x, int y) {  //cmp为真,则把x放在y前面
	return x > y;  //不能出现等于号
}
sort(arr, arr + n, cmp);//结构体可以用这种定义

Q:整数排序(结构体)

struct shu {
	int yuan;
	int mo;
};
bool cmp(shu x, shu y) {
	return x.yuan < x.yuan;
}
int main() {
	//结构体,数字大小和模三余数。
	//按数字排序,遍历3次(输出余数是0,1,2)
	int n;
	cin >> n;
	shu s[105] = { 0 };
	for (int i = 0; i < n; i++) {
		cin >> s[i].yuan;
		s[i].mo = s[i].yuan % 3;
	}
	sort(s, s + n, cmp);
	for (int i = 0; i < n; i++) {
		if (s[i].mo == 0)
			cout << s[i].yuan << " ";
	}
	for (int i = 0; i < n; i++) {
		if (s[i].mo == 1)
			cout << s[i].yuan << " ";
	}
	for (int i = 0; i < n; i++) {
		if (s[i].mo == 2)
			cout << s[i].yuan << " ";
	}
	return 0;
}

也可以这样写个构造函数,函数成员(上面的例子只有成员变量)

struct shu {
	int yuan;
	int mo;
	shu(int y) {
		yuan = y;
		mo = y % 3;
	}
	shu(int y = 0,int mo = 0){}
	shu(){}
};

Q:评奖

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct student{
	string name;
	int shu;
	int yu;
	int eng;
	int di;
	int num = 0;
	void sum() {
		num = shu + yu + eng + di;
	}
};
bool cmp(student x, student y) {
	return x.num > y.num;
}
int main() {
	int n;
	cin >> n;
	student stu[42];
	for (int i = 0; i < n; i++) {
		cin >> stu[i].name >> stu[i].shu >> stu[i].yu >> stu[i].eng >> stu[i].di;
		stu[i].sum();
	}
	sort(stu, stu + n, cmp);
	int i = -1;
	while (++i!=3) {
		cout << stu[i].name << " ";
	}
	return 0;
}

————————————————————————————————————

学习视频05-使用 sort 排序练习(C++版)_哔哩哔哩_bilibili

Q/S:浮点数排序

const double EPSILON = 1e-6;
double num[105];
bool cmp(double a, double b) {
	double da = fabs(a - round(a));//!!
	double db = fabs(b - round(b));//!!
	if (fabs(da - db) < EPSILON)
		return a < b;   //表示a,b相等的情况
	return da < db;
}
int main() {
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> num[i];
	}
	sort(num, num + n, cmp);
	for (int i = 0; i < n; i++) {
		if (i != n - 1)      //!!有可能结尾不让有空格
			printf("%lf", num[i]);		//!!!不能cout << num[i] << " ";
		else
			printf("%lf\n", num[i]);  //!!!默认都是6位
	}
	return 0;
}

Q:分数线

int main() {
	int n;
	cin >> n;
	int fen[100005];
	for (int i = 0; i < n; i++) {
		cin >> fen[i];
	}
	sort(fen, fen + n, greater<int>());
	int num = n / 2 + 1;
	int f = fen[n / 2];
	for (int i = n / 2; i < n; i++) {
		if (fen[i + 1] == fen[i])
			num++;
	}
	cout << f << " " << num;
	return 0;
}

Q:交叉排序:

int main() {
	int n, l1, l2, r1, r2;
	cin >> n >> l1 >> r1 >> l2 >> r2;
	int num[10005];
	for (int i = 0; i < n; i++) {
		cin >> num[i];
	}
	sort(num + l1 - 1, num + r1);//!!!必须是左边减一个,右边不用减才是第l1~r1个数字
	sort(num + l2 - 1, num + r2, greater<int>());
	for (int i = 0; i < n; i++) {
		if (i != n - 1)
			cout << num[i] << " ";
		else
			cout << num[i] << '\n';
	}

	return 0;
}

Q:红蓝绿        //字符串/字符数组可以直接sort(ch,ch+len)

bool cmp(char x, char y) {
	int a = x - 'A';
	int b = y - 'A';
	return a < b;
}
int main() {
	string s;
	cin >> s;   //也可以getline(cin, s);
	int len = s.length();
	char ch[10003];
	int n1 = 0, n2 = 0, n3 = 0;
	for (int i = 0; i < len; i++) {
		ch[i] = s[i];
		if (ch[i] == 'B')
			n1++;
		if (ch[i] == 'G')
			n2++;
		if (ch[i] == 'R')
			n3++;
	}
	sort(ch, ch + len, cmp);
	n1 /= 3;
	n2 /= 2;
	if (n1 > n2)
		n1 = n2;
	if (n1 > n3)
		n1 = n3;
	for (int i = 0; i < len; i++) {
		cout << ch[i];
	}
	cout << '\n' << n1;
	return 0;
}

Q:整数排序进阶

bool cmp(int x, int y) {
	int sumx = 0, sumy = 0;
	int xx = x, yy = y;  //!!!!
	for (int i = 0; i < 4; i++) {
		sumx += x % 10;
		x /= 10;
		sumy += y % 10;
		y /= 10;
	}
	if (sumx == sumy)
		return xx < yy;   //!!!!x,y发生了变化
	else
		return sumx < sumy;

}
using namespace std; int main() {

	int n;
	cin >> n;
	int num[103];
	for (int i = 0; i < n; i++) {
		cin >> num[i];
	}
	sort(num, num + n, cmp);
	for (int i = 0; i < n; i++) {
		if (i != n - 1)
			cout << num[i] << " ";
		else
			cout << num[i];
	}
	return 0;
}

Q:成绩排序

struct student {
	int id;
	int grade;
};
bool cmp(student x, student y) {
	return x.grade > y.grade;
}
int main() {
	int n;
	cin >> n;
	student stu[102];
	for (int i = 0; i < n; i++) {
		cin >> stu[i].grade;
		stu[i].id = i + 1;
	}
	sort(stu, stu + n, cmp);

	for (int i = 0; i < n; i++) {
		cout << stu[i].id << " ";
	}

	return 0;
}

Q:成绩排序进阶版

struct student {
	string name;
	int yu;
	int shu;
	int eng;
	int ke;
	int sum;
	void ssum() {
		sum = yu + shu + eng + ke;
	}
};
bool cmp1(student x, student y) {
	return x.yu > y.yu;
}
bool cmp2(student x, student y) {
	return x.shu > y.shu;
}
bool cmp3(student x, student y) {
	return x.eng > y.eng;
}
bool cmp4(student x, student y) {
	return x.ke > y.ke;
}
bool cmp5(student x, student y) {
	return x.sum > y.sum;
}

int main() {
	int n;
	cin >> n;
	student stu[102];
	for (int i = 0; i < n; i++) {
		cin >> stu[i].name >> stu[i].yu >> stu[i].shu >> stu[i].eng >> stu[i].ke;
		stu[i].ssum();
	}
	sort(stu, stu + n, cmp1);
	for (int i = 0; i < 4; i++) {
		cout << stu[i].name << " ";
	}
	cout << '\n';
	sort(stu, stu + n, cmp2);
	for (int i = 0; i < 4; i++) {
		cout << stu[i].name << " ";
	}
	cout << '\n';
	sort(stu, stu + n, cmp3);
	for (int i = 0; i < 4; i++) {
		cout << stu[i].name << " ";
	}
	cout << '\n';
	sort(stu, stu + n, cmp4);
	for (int i = 0; i < 4; i++) {
		cout << stu[i].name << " ";
	}
	cout << '\n';
	sort(stu, stu + n, cmp5);
	for (int i = 0; i < 4; i++) {
		cout << stu[i].name << " ";
	}
	cout << '\n';

	return 0;
}

Q:抢气球

struct student{
	int id;
	int a;
	int sum = 0;
};
bool cmp1(student x, student y) {
	return x.a < y.a;
}
bool cmp2(student x, student y) {
	return x.id < y.id;
}
int main() {
	int n, m;
	cin >> n >> m;
	int h[1003];
	student stu[1003];
	for (int i = 0; i < n; i++) {
		cin >> stu[i].a;
		stu[i].id = i + 1;
	}
	for (int i = 0; i < m; i++)
		cin >> h[i];
	sort(stu, stu + n, cmp1);
	sort(h, h + m);
	int j = 0;
	for (int i = 0; i < n; i++) {
		while (stu[i].a >= h[j] && j < m) {    //!!!要限制j的条件!!!
			stu[i].sum++;
			j++;
		}
	}
	sort(stu, stu + n, cmp2);
	for (int i = 0; i < n; i++)
		cout << stu[i].sum<<'\n';
	return 0;
}

————————————————————————————————————————

看完一个视频啦,终于!!下一个视频新开一个笔记!再见嘻嘻

(哈哈哈哈哈哈哈)

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓晓hh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值