第十二届河南省acm省赛热身赛a题

题意:

一个不超过100位的大整数,去掉其中k位之后剩余的数按照原来的顺序组合成新的整数,求新的整数最小的值为多少

例如 :

 45602  去掉两位,结果为402,

12045 去掉两位 结果为45(新数前导零删除)

10204055 去掉三位  结果为55

 

思路:

将删除k位转换成从原来的整数n位中取 n-k位

ac代码:

#include
#include
#include
#include
#include
using namespace std;
int main(){
	int t,k;
	cin>>t;  //t个测试样例 
	while(t--){
		string ss;
		cin>>k>>ss;   //去除k位,大整数ss(使用字符串表示) 
		int l=-1,r=k+1,min1=99999999,flag=0;   //l表示左边标识,r代表右边标识,min1标识找到此轮中最小的一个
		                                       //flag标识是否是前导零 
		while(r<=ss.size()){
			for(int i=l+1;iss[i]-'0'){
					min1=ss[i]-'0';
					l=i;
				}
			}
			r++;   //右标识往右移动一步 
			if(ss[l]!='0'||ss[l]=='0'&&flag){    //若非零直接输出,若为零且并非前导零则直接输出 
				cout<

第十二届河南省acm省赛热身赛a题_第1张图片

 

你可能感兴趣的:(第十二届河南省acm省赛热身赛a题)