P1106 删数问题
题目描述
键盘输入一个高精度的正整数N,去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和k,寻找一种方案使得剩下的数字组成的新数最小。
输出应包括所去掉的数字的位置和组成的新的正整数。(N不超过250位) 输入数据均不需判错。
输入输出格式
输入格式:n (高精度的正整数)
k (需要删除的数字个数)
输出格式:最后剩下的最小数。
输入输出样例
输入样例#1:
175438 4
输出样例#1:
View Code
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; }
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:
View Code
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; }