问题标题: 酷町堂:1552 数字穿串

0
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
沈峻宇
沈峻宇
资深天翼
资深天翼

80分说明你的思路是对的,但在程序表达上边出了问题!

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
我要回答