记录string的妙用

P1106 删数问题

题目描述

键盘输入一个高精度的正整数N,去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和k,寻找一种方案使得剩下的数字组成的新数最小。

输出应包括所去掉的数字的位置和组成的新的正整数。(N不超过250位) 输入数据均不需判错。

输入输出格式

输入格式:

n (高精度的正整数)

k (需要删除的数字个数)

输出格式:

最后剩下的最小数。

输入输出样例

输入样例#1:
175438 
4
输出样例#1:
13

——————————————————————————————
记录一波代码而已 erase的妙用啊QAQ
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#define LL long long
using namespace std;
int read(){
    int ans=0,f=1,c=getchar();
    while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
    while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
    return ans*f;
}
string s;
int n,now;
int main()
{
    cin>>s;
    n=read();
    for(int i=0;i<n;i++){
        now=0;
        while(now<s.size()-1&&s[now]<=s[now+1]) now++;
        s.erase(now,1);
    }
    while(s.size()>1&&s[0]=='0') s.erase(0,1);
    cout<<s;
    return 0;
}
View Code

P1012 拼数

 

题目描述

设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。

例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213

又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613

输入输出格式

输入格式:

第一行,一个正整数n。

第二行,n个正整数。

输出格式:

一个正整数,表示最大的整数

输入输出样例

输入样例#1:
3
13 312 343
输出样例#1:
34331213
——————————————————————————
string的sort
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#define LL long long
using namespace std;
int read(){
    int ans=0,f=1,c=getchar();
    while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
    while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
    return ans*f;
}
int n;
string s[55];
bool cmp(string a,string b){return a+b>b+a;}
int main()
{
    
    n=read();
    for(int i=1;i<=n;i++) cin>>s[i];
    sort(s+1,s+1+n,cmp);
    for(int i=1;i<=n;i++) cout<<s[i];
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/lyzuikeai/p/7283890.html