0
已解决
张帆
中级天翼
中级天翼
#include<bits/stdc++.h>
using namespace std;
string a[30];
bool cmp(string a,string b){
return a>b;
}
int main(){
int n;
cin>>n;
getchar();
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
cout<<a[i];
}
return 0;
}
80
张帆在2020-03-29 13:01:53追加了内容
@包涵宇
0
已采纳
臧鸿志
初级天翼
初级天翼
这是一道题贪心题,cmp排序规则写错了。
当有2个字符串时,到底是a+b 或者b+a 都会构成一个新的字符串 ,让字典序大的排在前面。
0
0
包涵宇
中级天翼
中级天翼
首先问你
干嘛用getchar()???
getchar()用于输入STRING后输入数字时要用的!!!
@沈峻宇
不是啊!!!
他思路错了!!!
比如:
输入3 12 9 3
应该输出9312
但你的代码应该会输出1293
这题不要用SORT!!!
别偷懒!!!
自己写!!!
我们来看啊。。
首先,输入的数用STRING定义(n除外!!!)
先找到两个要比较的数
假如一个数是a,一个数是b
我们先定义一个小旗子
先让他立着(=1)
循环遍历每一位(循环变量=0;循环变量<min(a.size(),b.size());循环变量++)
如果a的这一位<b的这一位 b排在前面,a排在后面,小旗子倒下,结束循环。
否则 循环继续
循环结束后,判断小旗子
如果小旗子立着{
如果a.size()<b.size() b排在后面,a排在前面
否则 b排在前面,a排在后面
}
具体代码如下:
int f=1;
for(int i=0;i<min(a.size(),b.size());i++)
if(a[i]<b[i]){
swap(a,b);
f=0;
break;
}
if(f==1){
if(a.size()>b.size())
swap(a,b);
}
如果套上选择循环框架,代码要做小小的改动,具体如下:
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++){
int f=1;
for(int l=0;l<min(a[i].size(),a[j].size());l++)
if(a[i][l]<a[j][l]){
swap(a[i],a[j]);
f=0;
break;
}
if(f==1){
if(a[i].size()>a[j].size())
swap(a[i],a[j]);
}
}
PS:手敲不容易,一提交0分!!!悲风吹泪过扬州!!!
求求楼主了,采纳吧!!!
0
潘晨皓
高级天翼
高级天翼
0
0