目录
1.浮点数排序 4.00
fabs函数求绝对值,round四舍五入
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
double nums[105];
const double EPS = 1e-6;
bool cmp(double a, double b) {
double da = fabs(a - round(a));//绝对值和四舍五入
double db = fabs(b - round(b));
if (fabs(da - db) < EPS)return a < b;//判断相等的情况
else return da < db;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
sort(nums, nums + n, cmp);
for (int i = 0; i < n; i++) {
if (i != n - 1)
printf("%lf ", nums[i]);
else printf("%lf\n", nums[i]);
}
return 0;
}
2.sort函数参数
起始下标与结束下标后一位,分段排序用两次sort
3.红绿蓝穿手串
min函数嵌套就3个数最小值.
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int a, b, c;
int main() {
string s;
cin >> s;
sort(s.begin(), s.end());
cout << s << endl;
int n = s.size();
for (int i = 0; i < n; i++) {
if (s[i] == 'R')a++;
if (s[i] == 'G')b++;
if (s[i] == 'B')c++;
}
cout << min(a, min(b / 2, c / 3));
return 0;
}
4.整数排序进阶 17.00
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int xy(int a) {
int sum = 0;
while (a) {
sum += a% 10;
a = a / 10;
}
return sum;
}
bool cmp(int a, int b) {
int aa = a, bb = b;
int x = xy(a); int y = xy(b);
if (x == y)return aa < bb;
return x < y;
}
int nums[105];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
sort(nums, nums + n, cmp);
for (int i = 0; i < n; i++) {
cout << nums[i] << ' ';
}
return 0;
}
5.成绩排序 20.00
用结构体捆绑成绩与标号然后输出
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
struct student {
int score;
int id;
};
student nums[105];
bool cmp(student a,student b) {
return a.score > b.score;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> nums[i].score;
nums[i].id = i + 1;
}
sort(nums, nums + n, cmp);
for (int i = 0; i < n; i++) {
cout << nums[i].id << ' ';
}
return 0;
}
6.成绩排序升级 23.00
用strcmp函数使名字按照字典大小排序,或者用string直接比较大小
7.抢气球升级版 37.00
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
struct student {
int a;
int id;
};
student child[1005];
int h[1005];
int ans[1005];
bool used[1005];
bool cmp(student a,student b) {
return a.a < b.a;
}
int main() {
int n,m;
cin >> n>>m;
for (int i = 0; i < n; i++) {
cin >> child[i].a;
child[i].id=i;
}
for (int i = 0; i < m; i++) {
cin >> h[i];
}
sort(child, child + n, cmp);
//升级版降低时间复杂度通过对高度也进行排序
/*sort(h, h + m);
int p = 0;
for (int i = 0; i < n; i++) {
while (p < m && h[p] <= child[i].a) {
ans[child[i].id]++;
p++;
}
}*/
for(int i=0;i<n;i++)
for (int j = 0; j < m; j++) {
if (!used[j]&&h[j]<=child[i].a) {
ans[child[i].id]++;
used[j] = true;
}
}
for (int i = 0; i < n; i++) {
cout << ans[i] << endl;
}
return 0;
}