题目1:给你一个不超过100位的数n,和一个不超过100的数字k,要求从数n中去掉k个数字,然后使得去掉k个数之后,n最小。
题解链接:https://blog.youkuaiyun.com/C20190413/article/details/77368590
代码1
#include<iostream>
using namespace std;
#include<cstring>
#include<string>
#include<vector>
const int MAXN=1005;
string str;
int del[MAXN];
int casee;
int n;
int k;
int main()
{
cin>>casee;
while(casee--)
{
memset(del,0,sizeof(del));
cin>>str;
scanf("%d",&k);
int i;
while(k--)
{
int yes=0;
for( i=0;i<str.size()-1;i++)
{
if(str[i]>=str[i+1])
{
str.erase(i,1);
yes=1;
break;
}
}
if(!yes)
str.erase(str.size()-1,1);
}
cout<<str<<endl;
}
return 0;
}
代码2 一遍扫描 没用erase
#include<iostream>
using namespace std;
#include<cstring>
#include<string>
#include<vector>
const int MAXN=1005;
string str;
int del[MAXN];
int casee;
int n;
int k;
int main()
{
cin>>casee;
while(casee--)
{
memset(del,0,sizeof(del));
cin>>str;
str="0"+str; //防止第一位就被删除
scanf("%d",&k);
int i=0;
int j=0;
int num=0;
while(1)
{
if(i+1<str.size()) //每次跳一步
j=i+1;
else j=i;
while(j+1<str.size() && del[j])
{
j++;
}
if(str[i]<str[j])
{
i=j;
}else{
del[i]=1;
num++;
if(num==k) //如果删除完毕
{
break;
}
while(i-1>=0 && del[i])
{
i--;
}
}
}
for(int i=1;i<str.size();i++) //不存在0 如果存在0,注意去掉前缀0
{
if(!del[i])
cout<<str[i];
}
cout<<endl;
}
return 0;
}
题目3:
遍历
#include<iostream>
using namespace std;
//这样写更简单,在递归后判断
int cal(string str1,string str2)
{
int ans=0;
if(!str1.size()||(str1.size()==1 && str1==str2))
return 1;
if(str1[0]!=str2[str2.size()-1])
return 0;
for(int len=0;len<=str1.size()-1;len++)
{
ans+=cal(str1.substr(1,len),str2.substr(0,len))*cal(str1.substr(len+1),str2.substr(len,str1.size()-1-len));
}
return ans;
}
//在递归前判断
//int cal(string str1,string str2)
//{
//
// int ans=0;
//
// if(!str1.size()||str1.size()==1)
// return 1;
//
// for(int len=0;len<=str1.size()-1;len++)
// {
// if(len)
// {
// if(str1[1]!=str2[len-1])
// continue;
// }
// if(len!=str1.size()-1)
// {
// if(str1[len+1]!=str2[str1.size()-2])
// continue;
// }
// ans+=cal(str1.substr(1,len),str2.substr(0,len))*cal(str1.substr(len+1),str2.substr(len,str1.size()-1-len));
// }
//
// return ans;
//}
int main()
{
string str1;
string str2;
cin>>str1>>str2;
int ans=cal(str1,str2);
cout<<ans;
return 0;
}