蓝桥杯备赛 | 洛谷做题打卡day3
学校正在选举学生会成员,有 n n n( n ≤ 999 n\le 999 n≤999)名候选人,每名候选人编号分别从 1 1 1 到 n n n,现在收集到了 m m m( m ≤ 2000000 m \le 2000000 m≤2000000)张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序。
输入 n n n 和 m m m 以及 m m m 个选票上的数字。
求出排序后的选票编号。
5 10
2 5 2 2 5 2 2 2 1 2
1 2 2 2 2 2 2 2 5 5
学会利用新知,自己多试试并尝试使用sort函数对数组快排,debug,以下是我的代码 ~
#include<iostream>
using namespace std;
char s[110][110];
int t = 0;
void find(int a, int b)
{
if (s[a][b] == '*') t++;
}
int main()
{
int n, m, cnt = 0;
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> s[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (s[i][j] == '*') cout << '*';
if (s[i][j] == '?')
{
for (int p = i - 1; p <= i + 1; p++)
{
for (int q = j - 1; q <= j + 1; q++) find(p, q);
}
cout << t;
t = 0;
}
}
cout << endl;
}
return 0;
}
今天还复习了一下冒泡排序,总的来说原理并不难,话不多说上代码 ~
#include<iostream>
using namespace std;
#define N 5 //定义了符号常量N,大家如果自己需要更改排序的数组数量的话可以直接在这里更改哦
int main()
{
int a[N];
cout << "请输入要排序的数组:" << endl;
for (int i = 0; i < N; i++) cin >> a[i];
cout << "排序前的数组为:" << endl;
for (int i = 0; i < N; i++) cout << a[i] << ' ';
cout << endl;
for (int i = 0; i < N - 1; i++)
{
for (int j = 0; j< N-i-1; j++)//非常简洁的代码,双层嵌套循环以便进行多趟冒泡排序
{
if (a[j] > a[j + 1])
{
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
cout << "排序后的数组为:" << endl;
for (int i = 0; i < N; i++) cout << a[i] << ' ';
cout << endl;
return 0;
}
我的一些话
关于冒泡排序:原本因为自己会忘的差不多了qaq,结果一上手原理还是蛮好懂的嘻嘻,定义了符号常量N,大家如果自己需要更改排序的数组数量的话可以直接在N后面更改哦(注释中有写)
总结来说思路很重要,多想想,多在草稿纸上画画,用测试数据多调试,debug后成功编译并运行出正确结果真的会感到很幸福!
关于之前蓝桥杯备赛的路线和基本方法、要掌握的知识,之前的博文我都有写,欢迎大家翻阅自取
不管什么都要坚持吧,三天打鱼两天晒网无法形成肌肉记忆和做题思维,该思考的时候一定不要懈怠,今天就说这么多啦,欢迎评论留言,一起成长:)