NYOJ-448-寻找最大数
来源:互联网 发布:全职法师实体书淘宝 编辑:程序博客网 时间:2024/06/05 13:18
寻找最大数
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888
- 输入
- 第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数) - 输出
- 每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
- 样例输入
292081346718538 101008908 5
- 样例输出
988898
题目分析: 这个贪心算法就有点小难理解了,首先要分析从什么位置开始查找,因为查找过程还不能改变原来数字的顺序。
9 2 0 8 1 3 4 6 7 1 8 , 5 3 8 10
0 1 2 3 4 5 6 7 8 9 10 ,11 12 13
来看这个数据,上边是原数据,下边是数据在数组中的脚码,总长度为 14 那么去掉 10 位后还有4 位那么次4位数的首位一定是在分号也即是10号之前0号后的数字中产生此数字的位置记为 k 而且这个数还是这之间最大的数,想一想是不是。那么第2位数一定是在11号之前在k+1号之后产生对吧此数子的位置记为k,第3位一定是在12号之前k+1之后产生此数字位置记为k,第4位一定是在13号前k+1之后产生吧。就是这个思路下面代码就好理解了。
<span style="font-size:24px;">#include<cstdio>#include<cstring>int main(){int T;scanf("%d",&T);while(T--){char a[101];int m;scanf("%s%d",a,&m);int len=strlen(a);int weishu=len-m;int j=0,i,k=0;char max='0';while(k<weishu){int max=0;for(i=j;i<=m+k;i++)// 此处i<=m+k 一定带有=号{if(max<a[i]){max=a[i];j=i;}}j++;k++;printf("%c",max);}printf("\n");}return 0;}</span>
0 0
- NYOJ-448 寻找最大数
- nyoj 448 寻找最大数
- nyoj-448-寻找最大数
- NYOJ-448 寻找最大数
- Nyoj 寻找最大数 448
- NYOJ-448 寻找最大数
- NYOJ 448 寻找最大数
- NYOJ 448 寻找最大数
- NYOJ 448 寻找最大数
- nyoj 448 寻找最大数
- nyoj 448 寻找最大数
- NYOJ 448 寻找最大数
- nyoj 448 寻找最大数
- NYOJ-448-寻找最大数
- 寻找最大数 nyoj 448
- NYOJ--448--寻找最大数
- nyoj 448 寻找最大数
- nyoj 448 寻找最大数
- Java学习第4天>>面向对象1
- 二维数组中找最大值,并且输出此行列的值
- 《汇编语言》第二版 王爽著 第七章 更灵活的定位内存地址的方法 要点
- opencv 线性滤波器
- hdu 5318 2015多校对抗赛三
- NYOJ-448-寻找最大数
- SQL语句Left join 中On和Where的用法区别
- APP评测之:用户调研问卷
- WINDOWS多线程-互斥量
- java 当中的多态,面向对象,方法的重载,Final关键字
- .NET框架 三种预定义特性的介绍
- hdu 5335 Walk Out【搜索】
- Windows Phone Silverlight 音乐进度条简单实现
- python matplotlib 基础