超短的排序题解
2025-08-26 13:33:37
发布于:广东
8阅读
0回复
0点赞
作为第54届欢乐赛的T5,理论上是不会太难的。
但是,为什么无论是官方还是用户写的题解都那么长啊!
这一次,我来教一个更简短的方法,当然代码短的代价是理解难度大,我会逐步分析并在关键位置注释。
首先,这题的难点是它要求按列排序,C++本身当然没带这个函数,只有按行排序的sort()函数。但程序是死的,你得活着。这时把行和列交换一下就行了,剩下的就交给sort()排序完成。
其次身高为时应该排在最底层,这时如果身高为(空位),就赋一个很大的整数值(也没必要太大,大于即可),最后判断或者取余后格式化输出即可。
#include<iostream>
#include<algorithm>//稳妥起见,可以添加cstdio头文件
using namespace std;
int n,m,a[105][105];
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[j][i];//完美绕开了按列排序的问题
if(a[j][i]==0) a[j][i]=10000;//赋值,后面要取模
}//其实赋201也可以,看你心情
}
for(int i=0;i<m;i++) sort(a[i],a[i]+n);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%4d",a[j][i]%10000);//真的很难懂吧
}
cout<<endl;
}
return 0;
}
这里空空如也
有帮助,赞一个