题目链接:
https://nuoyanli.com/contest/25/problem/A
题面:
题意:
多组输入,输入两个数n,m,n代表一个很大的数,m代表要删除这个数的位数,要保证删除后剩余的数原顺序不变,且确保删除后得到的数最大。
思路:
首先要主要这题要求是多组输入(一定要记得设置为多组输入),其次这题n是一个特别大的数值,不能使用long long ,要使用char 字符串来存储n的值。然后要保证删除后的顺序不变,所以不能使用sort或者冒泡来进行排序。接下来来分析题目的实现,首先根据样例,我们输入了一个14位的数字,需要删除10位,保留4位而且要使得其最大。
我们可以先试想一下:
从第一位到第m+1位进行比较找出最大的那位数
再从最大的那位数的后一位到m+2位进行比较找出最大的那位数
··············
这时候既可以保证数值最大,也能保证保留的位数无误。
这样子就可以筛选出4个数字而且保证其位置不变,数值最大了。
参考代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{
char a[10000];
int m,t,k,i,p,len,sum;
while(scanf("%s%d",a,&m)!=EOF)//多组输入
{
len=strlen(a);
t=len-m;//判断最后要剩下几位数
p=0;
while(t--)
{
for(i=p; i<=m; i++)
{
if(a[p]<a[i])
p=i;//判断从p到m区间内的最大值所对应的i
}
printf("%c",a[p]);
p=p+1;//重新定义判断区间
m=m+1;//依次就后推进一个区间
}
printf("\n");
}
}