1255: 寻找最大数X(nyoj_448)
时间限制: 1 Sec 内存限制: 128 MB提交: 17 解决: 16
您该题的状态:已完成
[提交][状态][讨论版]
题目描述
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888
输入
第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
输出
每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
样例输入
2
92081346718538 10
1008908 5
样例输出
9888
98
提示
来源
#include<stdio.h>
#include<string.h>
int main()
{
int k,max,t,len;
char a[105],st[105];
scanf("%d",&t);
while(t--)
{
scanf("%s %d",a,&k);
len=strlen(a);
for(int i=0,p=-1;i<len-k;i++)
{
max=0;
for(int j=p+1;j<=k+i&&j<len;j++){//每次从寻找范围中挑选最大数
if(a[j]>max)
max=a[j],p=j;
}
st[i]=max;
}
st[len-k]='\0';
puts(st);
}
}
寻找最大数(三)
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。
求这个新的整数的最大值是多少。
-
输入
-
多组测试数据。
每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100).
输出
- 每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。 样例输入
-
1990 1 100 0 9090000078001234 6
样例输出
-
9190 100 9907000008001234
来源
- 原创 上传者
- TC_李远航
#include<stdio.h>
#include<string.h>
int main()
{
char a[30],temp;
int k,len,t;
while(~scanf("%s %d",a,&k))
{
len=strlen(a);
for(int i=0;i<len&&k!=0;i++)
{
t=i;
for(int j=t;j<=k+i&&j<len;j++)
{//从可以换位的区域中选取最值
if(a[t]<a[j]){
t=j;
}
}
for(int j=t;j>i;j--){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
k-=t-i;//移动步数减少
}
puts(a);
}
}