25-删除m位数是剩下的最大
/* 寻找最大数
题目内容:
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888
输入描述
第一行输入一个正整数T,表示有T组测试数据每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
输出描述
每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
输入样例
2
92081346718538 10
1008908 5
输出样例
9888
98
*/
//暴力求解,循环搜索m次逆序的将其去掉,通过将其赋为后面大的那个数的相反数,如果有m个逆序,那得到的除去负值就是该
//求最大数,如果去掉的不足m个,显然前面len - m个非负数就是所求最大数。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main(){
char a[105];
int b[105], c[105];
int n;
cin >> n;
while(n--){
int m;
cin >> a;
cin >> m;
int count = 0, len = strlen(a);
for(int i = 0; i < len; i++)
b[i] = a[i] - '0';
for(int j = 0; j < m; j++)
for(int i = 0; i < len - 1, count <= m; i++){
if(b[i] >= 0 && b[i] < abs(b[i + 1])){
b[i] = - abs(b[i + 1]);
count++;
break;
}
}
int s = 0;
for(int i = 0; i < len; i++){
if(b[i] >= 0){
c[s++] = b[i];
}
}
int len1 = len - m, cc = 0;
for(int i = 0; i < s; i++){
cout << c[i];
cc++;
if(cc >= len1)
break;
}
cout << endl;
}
return 0;
}
核心思想:比如 92081346718538 这个数,去掉十个数之后,按原来的次序组成最大数,那么开始计算,
一共14位数,如果去掉十位数,剩四位数,要想这四位数最大,那么逐次查找,使得首位最大才是结果最大
的前提:一:从前11位开始查找,找到一位最大数,对这个位置做个标记flag;二,从flag到第12位数,找
到最大值,再做标记flag,依次循环,,,,,,直到找到最后结果为止
#include<stdio.h>
#include<string.h>
#define M 101
char a[M],b[M];
int i,j,n,m,flag;
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
j=0;flag=0;
memset(a,0,sizeof(a));
scanf("%s %d",a,&m);
n=strlen(a);
for(int w=m;w<n;w++)
{
char max=a[flag];
for(i=flag;i<=w;i++)
{
if(max<a[i])
{
max=a[i];
flag=i;
}
}
b[j++]=max;
a[flag]='0';
}
puts(b);
}
return 0;
}
25-删除m位数是剩下的最大的更多相关文章
- hdu 4587 推断孤立点+割点+ 删除点之后,剩下多少连通分量
做了非常久...... 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4587 先枚举删除的第一个点,第二个点就是找割点.没有割点当然也有答案 学到 ...
- 删除一个数的K位使原数变得最小
原创 给定一个n位正整数a, 去掉其中k个数字后按原左右次序将组成一个新的正整数.对给定的a, k寻找一种方案,使得剩下的数字组成的新数最小. 提示:应用贪心算法设计求解 操作对象为n位正整数,有可能 ...
- sed 删除用法
sed ‘1,4d’ dataf1 #把第一行到第四行删除,并且显示剩下的内容 sed ‘/La/d’ dataf2 #把含有 La 的行删除 sed ‘/La/!d`’#把不含 La 的行删除,!是 ...
- 使用AutoIT对增加和删除文件属性的实现
编写历程: 前段日子,晚上下班回家,一个舍友问我可不可以将一个目录下的隐藏文件全部显示出来(变成非隐藏文件),我说可以. 之后就开始大刀阔斧的寻找方法来做这件事,上网找,说需要一个Windows下的小 ...
- 一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)
在开发中,经常用到选择多张图片进行上传或作其他处理等等,以下DEMO满足了此功能中的大部分功能,可直接使用到项目中. 主要功能如下: 1,图片九宫格排列(可自动设置) 2,图片长按抖动(仿苹果软件删除 ...
- IT公司100题-18-圆圈中最后剩下的数字
问题描述: n个数字(下标为0, 1, …, n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(当前数字从1开始计数).当一个数字被删除后,从被删除数字的下一个数字开始计数,继续删除 ...
- iOS学习之--字符串的删除替换(字符串的常用处理,删除,替换)
字符串操作,比较简单,仅做记录! 1.删除 NSString *str1 = @"<hello,wo r d!>"; //删除字符串两端的尖括号 NSMutableSt ...
- PAT甲题题解-1013. Battle Over Cities (25)-求联通分支个数
题目就是求联通分支个数删除一个点,剩下联通分支个数为cnt,那么需要建立cnt-1边才能把这cnt个联通分支个数求出来怎么求联通分支个数呢可以用并查集,但并查集的话复杂度是O(m*logn*k)我这里 ...
- iOS学习-字符串的删除替换
字符串的常用处理,删除,替换.记录一下,方便查找. -------------------------------------------------------------------------- ...
随机推荐
- 解决 pycharm can not save setting
这个问题出现的原因是因为PyCharm中存在相同名字的虚拟环境变量. 解决方法:Configure Python Interpreter 点击右上角齿轮状按钮, 选择 show all,然后删除相同名 ...
- 关于oracle数据库压力测试
今天接到需求,需要对oracle数据库进行压力测试,就这几个字的需求. 然后查看了以下软件: 1.Benchmark Factory是一款专业的服务器性能测试工具,专为数据库测试和可扩展性测量而设计, ...
- linux操作系统4 软件包管理
知识内容: 1.软件包介绍 2.基本软件包安装 3.yum软件包管理 4.apt软件包管理 5.源码安装 一.软件包介绍 1.软件包分类 压缩包形式:类似.tar.gz结尾的文件(源码) rpm: r ...
- 原生socket请求url获取状态码、消息报头、响应正文
需求: (1)使用socket及ssl模块写通用的web客户端 (2)向服务器发起请求 (3)接受响应内容并解析出状态码.消息报头.响应正文 (4)最核心的函数: 输入一个url,返回状态码.消息报头 ...
- 3.2_k-近邻算法案例分析
k-近邻算法案例分析 本案例使用最著名的”鸢尾“数据集,该数据集曾经被Fisher用在经典论文中,目前作为教科书般的数据样本预存在Scikit-learn的工具包中. 读入Iris数据集细节资 ...
- 网络性能测试工具iperf
参考网站:https://www.cnblogs.com/yingsong/p/5682080.html https://docs.azure.cn/zh-cn/articles/azure-oper ...
- DataSanp App与Rest, WebBroker App的区别
DataSanp App与Rest, WebBroker App的区别 datasnap server :选择这一项,我们得到的将是一个独立EXE的三层服务器应用程序(TCP及HTTP两种模式) To ...
- storyboard中UIButton setframe 不起作用
将storyboard的autolayout选项关掉!(暂时没发现具体什么原因.)
- python, Django csrf token的问题
环境 Window 7 Python2.7 Django1.4.1 sqlite3 问题 在使用Django搭建好测试环境后,写了一个提交POST表单提交留言的测试页面. 如图: 填写表单,点击“提交 ...
- python中if __name__ == '__main__': 解析
当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一 ...