這道題有個最重要的特點,就是要在刪除數的情況下,原序輸出的數是最大的纔可以,一定要記住,是原序
這道題的貪心策略就是在按順序的情況下一次一次找到該輸出的最大數
舉個例子:假如輸入數據的長度是14位,要刪掉的是10位,在保證順序的情況下,輸出4次,每次都按前後順序輸出最大值,即若存儲下標爲0到13,則在下標爲0到10之間的數中選出最大值輸出,用max記錄最大值對應的下標,接下來在max+1到11之間,找出最大值輸出,依此類推,即可
我做這題的時候一開始 沒有注意按原順序 再後來 發現測試數據有點特殊 有的數據特點它沒體現出來 接下來放代碼 然後再給幾組測試數據
測試數據:
3
1008908 5
199609170620 7
19007596 5
98
99976
996
#include <stdio.h>
#include <string.h>
char a[105];
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
int m;
scanf("%s%d",a,&m);
int len=strlen(a);
int i,j,max=0;//max作爲標記
for(j=len-m;j>0;j--)//控制循環次數 即找最大數的次數
{
for(i=max+1;i<len-j+1;i++)//控制從哪裏到哪裏找該次應輸出的最大次數
{
if(a[max]<a[i])
{
max=i;
}
}
printf("%c",a[max]);
max=max+1;//此時max的值代表下一次找最大數應開始的位置
}
printf("\n");
}
return 0;
}