Posted on 2011-05-11 23:38
acpeng 阅读(677)
评论(0) 编辑 收藏 引用 所属分类:
ACM程序
昨天逛一论坛,遇到一道
acm题,地址是
http://acmpj.zstu.edu.cn/JudgeOnline/showproblem?problem_id=2511大致意思是从一个有
n 位的整数中删除
k 位,使剩下的数字按原来的顺序组成的数最小。
我的代码总是
WA,不知有没有大牛路过,指点一二,在此谢。
我的思路是这样:
步骤一:在第 1 位到第
k+1 位之间(含第
k+1 位)找出最小的数字,记录这个数字所在的位数p;
步骤二:再从第
p 位到第
k+2 位之间找出最小的数字,再记录此数所在的位数p;
后面重复
n-k 次前面的操作,这样按顺序输出每一次操作得到的最小数字即可。当然输出时注意去掉起始的若干个0。
下面是代码
#include<stdio.h>
#include<string.h>
char a[1005]="\0",rslt[1005]="\0";
int main()
{
int T,k,n,i,j,lp;
scanf("%d",&T);
while(T--)
{
scanf("%d",&k);
scanf("%s",a);
n=(int)strlen(a);
if(k==n)
{
printf("0\n");
continue;
}
lp=-1;
for(j=0;j<n-k;j++)
{
lp++;
rslt[j]=a[lp];
for(i=lp;i<k+j+1;i++)
{
if(rslt[j] > a[i])
{
rslt[j]=a[i];
lp=i;
}
}
}
i=0;
while(*(rslt+i)=='0' && *(rslt+i)!='\0') i++;
printf("%s\n",rslt+i);
memset(a,0,sizeof(a));
memset(rslt,0,sizeof(rslt));
}
return 0;
}