NYOJ448寻找最大数,贪心~~
2016-03-14 16:11
369 查看
寻找最大数
时间限制:1000 ms | 内存限制:65535 KB难度:2
描述
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888
输入第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
输出每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
样例输入
2 92081346718538 10 1008908 5
样例输出
9888 98
很明显的贪心思路,可是一直不造怎么写,又不能改变原串,,,,,后来换了种思路,既然要删掉m个数求最大,可以在前n-m个数字中找最大值,然后标记找到的数字的位子,假如记为k1吧,然后再k1+1到n-m+1中找第二个最大的,再标记位置。。。剩下的m-2个数字都是这样找的。。。如果没看懂我的思路,可以看看下面的代码简单模拟一下
上代码:
#include<bits/stdc++.h> using namespace std; char a[105],b[105]; int main() { int n,t,i,k,k1,k2,k3,x,x1,x2; char c; scanf("%d",&t); while(t--) { memset(b,'0',sizeof(b)); scanf("%s%d",a,&n); x=strlen(a); x1=x2=strlen(a)-n; k=k1=k2=k3=0; while(x1--) { c=a[k1],k3=k1,k2=x-x1-1; for(i=k1;i<=k2;i++) { if(k1==k2) { k3=k1; break; } if(a[i]>c) { c=a[i]; k3=i; } } b[k++]=c; k1=k3+1; } for(i=0;i<x2;i++) printf("%c",b[i]); printf("\n"); } return 0; }
相关文章推荐
- imx6ul使用记录之----lsusb命令在arm上的移植
- Clusterd:专门渗透应用服务器的开源工具包
- 红黑树
- Kotlin For Android初体验——配置Kotlin
- 男怕入错行 完美池宇峰畅谈创业点滴
- 我想创业,但不懂技术怎么办
- Google 绘图(mapping)
- 不是技术牛人,如何拿到国内巨头Offer
- 乔布斯:关于Flash的几点看法
- AS3多种天气预报调用代码分享
- Flash加载ini文件!
- 大量实用工具类、开源包
- 我已率先抢占昵称,我的昵称独一无…
- 欢迎您在新浪博客安家
- pitch yaw roll是什么
- OpenGL学习日记1状态管理和绘制几何物体
- Openstack Generate image
- Flask 框架学习(三)
- 微软“WebDAV”提权漏洞(cve-2016-0051)初探
- 创建数据库并设置编码