题目:拼数
for(int i = 0; i < n; i++)
cin >> a[i]; 注意:cin可以实现a[1]里放一个字符串这种。数组并不是a[1]里只能放一个数
注意cin输入时 空格不放入数组(字符串中)所以数据行输入时用cin
排序注意
bool cmp (string a, string b){ //从大到小字典序排序
return a + b > b + a; //注意体会这个技巧
}
sort(a, a + n, cmp); //从大到小字典序排序
sort 函数的写法sort(nums+1, nums+1+n); 详情见下方代码块
数组可以理解为:从num数组标号1到n
sort 注意 包括前面 不包括后面
#include<bits/stdc++.h>
using namespace std;
int nums[200010];
int main() {
int n; scanf("%d",&n);
for(int i = 1; i <= n; i++)
scanf("%d",&nums[i]);
sort(nums+1, nums+1+n);
int cnt = 0;
for(int i = 1; i <= n; i++) {
cnt++;
if(nums[i] != nums[i+1]) {
printf("%d %d\n", nums[i], cnt);
cnt = 0;
}
}
}
cmp函数的意思为比较a+b和b+a。选择较大的放前面,实现降序。!!!一定注意类型是字符串
#include<bits/stdc++.h>
using namespace std;
string a[21]; //记录20个数,用字符形式
bool cmp (string a, string b){ //从大到小字典序排序
return a + b > b + a; //注意体会这个技巧
}
int main( ){
int n; cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n, cmp); //从大到小字典序排序
for(int i=0; i < n; i++)
cout << a[i];
return 0;
}
cmp函数写法2
用true的返回值来写
bool cmp(stu a,stu b){
if(a.sum > b.sum)
return true;
else if(a.sum < b.sum)
return false;
else{ //a.sum == b.sum
if(a.c > b.c)
return true;
else if(a.c < b.c)
return false;
else{ //a.c == b.c
if(a.id > b.id)
return false;
else return true;
}
结构体的写法
注意:结构体stu(同学) 与st(张三,李四等)
bool cmp(stu a,stu b) 注意!!!
#include<bits/stdc++.h>
using namespace std;
struct node{
int id; //学号
int c,m,e; //语、数、外
int sum;
}st[305]; //直接写数组
bool cmp(node a,node b){//这里写的是Node
排序:例题:外卖店优先级


输入:每一行的数据为结构体变量a[n]的两个元素
代码注意排序部分
bool cmp(node a, node b){ //结构体排序
if(a.id==b.id)
return a.time<b.time;
return a.id<b.id;
}
id从小到大排,id相同的时间从小到大排
//改写自:https://www.jianshu.com/p/1e625af51a3a
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int order[N]; //order[id] 第id号店上一次的订单
int prior[N]; //prior[id] 第id号店的优先级
int flag[N]; //flag[id] 第id号店在不在优先缓存中
struct node{
int time,id;
}a[N];
bool cmp(node a, node b){ //结构体排序
if(a.id==b.id)
return a.time<b.time;
return a.id<b.id;
}
int main(){
int m,n,T; cin>>n>>m>>T;
for(int i=0;i<m;i++)
cin>>a[i].time>>a[i].id;
sort(a,a+m,cmp); //按结构体中的时间排序
for(int i=0;i<m;i++){
int tt=a[i].time, id=a[i].id;
if(tt != order[id])
//如果当前订单不等于上一次的订单,则减去它们之间的间隔
prior[id] -= tt-order[id]-1;
prior[id] = prior[id] < 0 ? 0: prior[id]; //不小于0
if(prior[id]<=3) flag[id]=0;
prior[id]+=2;
if(prior[id]> 5) flag[id]=1;
order[id]=tt;
}
for(int i=1;i<=n;i++) //最后处理第T时刻
if(order[i]<T){
prior[i] -= T-order[i];
if(prior[i]<=3)
flag[i]=0;
}
int ans=0;
for(int i=0;i<=n;i++)
if(flag[i])
ans++;
cout<<ans;
return 0;
}
bool的意思
bool就是布尔的意思,布尔值的返回值只有真(true)和假(false),多用于判断。
break循环的意思
当break语句用于do-while、for、while循环语句中时,可使程序终止循环。
输入数据时如果想要黑框不消失一直输
写出while(1)
当输入的数据不符合要求时 break
逻辑表达式?:
s[i]=1?1:0
意思是s[i]等于1吗,等于1的话整个表达式值为1,不等于1时整个表达式值为0。
用法实例:
s1[i+1]=(s1[i+1]=='*'?'o':'*');
本文详细介绍C++中使用sort函数进行数组排序的方法,并通过具体示例展示了如何自定义比较函数以实现特定需求的排序逻辑,同时介绍了字符串处理及结构体排序的应用。
639

被折叠的 条评论
为什么被折叠?



