删数问题Word格式文档下载.docx
《删数问题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《删数问题Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
str,intn)
{
booldel;
for(inti=n;
i>
0;
i--)
del=false;
//每次删除第一个比下一个数字大的数
for(string:
:
iteratorit=str.begin();
it!
=str.end()-1;
it++)
if(*it>
*(it+1))
str.erase(it);
del=true;
break;
}
//如果所有数字递增,则删除最后几个数字直接返回
if(!
del)
str.erase(str.end()-i,str.end());
returnstr;
intmain()
intn;
stringstr;
cin>
>
str;
n;
cout<
<
greedy(str,n)<
endl;
return0;
代码2:
#include<
stdio.h>
stdlib.h>
string.h>
intnum=0;
charstr[100];
inta[100];
scanf(“%d”,&
num);
//数字
n);
//个数
itoa(num,str,10);
//转换为字符串
intflag=0;
//是否是递增序列
inti;
intlength=strlen(str);
//长度
intx=length-n;
while(length!
=x)
flag=0;
//递增
for(i=0;
i<
length-1;
i++)
if((str[i]-’0′)>
(str[i+1]-’0′))//比后一个数大删掉
for(inttemp=i;
temp<
temp++)
str[temp]=str[temp+1];
//覆盖
}
length–;
flag=1;
//非递增
}
if(flag==0)
//递增序列
删除最后一个
inttempFlag=0;
if(str[0]==’0′)
tempFlag=1;
//首位为0不应输出
for(inti=0;
length;
if(tempFlag==1)
tempFlag=0;
else
printf(“%c”,str[i]);
system(“pause”);
代码3:
voidfind()
charN[200];
ints;
inti=0,j;
printf("
inputthenumber:
"
);
scanf("
%s"
N);
\ninputtimes:
%d"
&
s);
while(s>
0)/*循环减s次*/
i=0;
/*每次删除后重头开始*/
while(i<
strlen(N)&
&
N[i]<
=N[i+1])i++;
/*算法核心*/
for(j=i;
j<
strlen(N);
j++)N[j]=N[j+1];
/*移位将删除的覆盖*/
s--;
{
find();
system("
pause"
代码4:
intsel(int);
intsum,len,in[20];
voidmain()
intinput,num;
【输入】\n"
%ld"
input);
inti=0;
for(;
input!
=0;
in[i]=input%10;
input/=10;
len=i;
if(-1==(sum=sel(num)))
return;
【输出】\n%d\n"
sum);
intsel(intn)
intj,k,l,m;
switch(len-n)
case0:
sum=0;
case1:
sum=in[0];
for(j=0;
len;
j++)
sum=sum>
in[j]?
in[j]:
sum;
case2:
sum=in[1]*10+in[0];
for(k=j+1;
k<
k++)
(in[k]*10+in[j])?
(in[k]*10+in[j]):
case3:
sum=in[2]*100+in[1]*10+in[0];
for(l=k+1;
l<
l++)
(in[l]*100+in[k]*10+in[j])?
(in[l]*100+in[k]*10+in[j]):
case4:
sum=in[3]*1000+in[2]*100+in[1]*10+in[0];
for(m=l+1;
m<
m++)
(in[m]*1000+in[l]*100+in[k]*10+in[j])?
(in[m]*1000+in[l]*100+in[k]*10+in[j]):
case5:
case6:
default:
输入错误或超限!
\n"
return-1;
returnsum;
代码5:
#include"
stdafx.h"
conio.h"
string.h"
#definestrMax1000
voidGreedDelNumber(charstr[],intlen,ints)
//
//for(inti=0;
i<
len;
i++)
//printf("
%c"
str[i]);
//printf("
);
if(s==0)
charnum[strMax]={0};
intj=0;
for(inti=0;
if(str[i]!
=0)
num[j++]=str[i];
strcpy(str,num);
intj=i+1;
while(str[j]==0&
j<
len)
j++;
if(j>
=len||str[i]>
str[j])
str[i]=0;
GreedDelNumber(str,len,s-1);
int_tmain(intargc,_TCHAR*argv[])
charstr[]="
41235"
;
ints=2;
printf("
原数为:
%s\n"
str);
长度为:
%d\n待删数:
%d\n"
strlen(str),s);
GreedDelNumber(str,strlen(str),s);
删除后:
getch();
代码6:
constintLimit_Size=