博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ 448(贪心)
阅读量:6706 次
发布时间:2019-06-25

本文共 2064 字,大约阅读时间需要 6 分钟。

寻找最大数

时间限制: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

#include<stdio.h>
#include<string.h>//memset,gets
#define N 110
//bool visit[N];//以防两数在两个区间都是最大值
char str[N];
int main()
{
int i;
int m,n,max, start,T,p;
//memset(str,0,sizeof(str));//否则用strlen不准确
scanf("%d",&T);
while(T--)
{
//memset(visit,0,sizeof(visit));
while(1)
{
scanf("%s %d",str,&n);//题目有要求首位不为0
if(str[0]!=0)
break;
}
//gets(str);
//for(i=1;i<=m;i++)‘’;,
//scanf("%c",&str[i]);
m=strlen(str);
p=m-n;
start=0;
while(p)
{
max='0'-1;
for(i=start; i<=m-p; i++)
{
if(max<str[i])
{
max = str[i];
start = i+1;
}
//visit[start] = true;
}
printf("%c",max);//不是%d
--p;
}printf("\n");
//for(i=0;i<l;i++)
//if(visit[i])
/*例如56853217 5,第一次出来8,第二次应该是6,而
6在8前面,所以输出语句应该在for内,不应该在用上面我屏蔽掉的for */
//putchar("\n");
}
return 0;
}

/*注意:把l改成p把,免得l和1分不清

贪心,每次在能够贪的区间找出最大字符,然后记录下一次是从最大字符的下标+1开始,所以start =
i+1
下次能贪的区间也就是:start ~ m-p
p是记录已经贪了多少字符了,每贪一个,就p--

 

 

 

 

 

错误代码:

看错题啦,按原次序,靠,必须是贪心
#include<stdio.h>
#include<string.h>//memset,gets
#define N 101
bool visit[N];//以防两数在两个区间都是最大值
char str[N];
bool Max(char a,char b)
{
if(a>=b)
return true;
return false;
}
int main()
{
int i,j;int T,l;int m,n,max;
memset(visit,0,sizeof(visit));
//memset(str,0,sizeof(str));//否则用strlen不准确
scanf("%d",&T);
while(T--)
{
while(1)
{
scanf("%s %d",str,&n);//题目有要求首位不为0
if(str[0]!=0)
break;
}
//gets(str);
//for(i=1;i<=m;i++)
//scanf("%c",&str[i]);
l=strlen(str);
for(i=0;i<l-n;i++)
{
max='0';
for(j=i;j<n+1+i;j++)
if(Max(str[j],max)&&!visit[j])
max=str[j];
visit[j-1]=true;
printf("%c",max);//不是%d
}
//for(i=0;i<l;i++)
//if(visit[i])
/*例如56853217 5,第一次出来8,第二次应该是6,而
6在8前面,所以输出语句应该在for内,不应该在用上面我屏蔽掉的for */

//putchar("\n");

printf("\n");
}
return 0;
}

 

 

 

//.cpp:56 [Warning] no newline at end of file
/*
这么规定的初衷有两个:

为了每一行都要以换行结束。

因为行尾的\表示连接下一行,如果一个文件最
后一行行尾有\,那么,紧跟它也被包含进来的下一个源文件的第一行就会
被连接!而如果一个文件以一个空行结束就会避免这种情况的发生。*/

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:http://jvilo.baihongyu.com/

你可能感兴趣的文章
关于页面里插flash
查看>>
我的友情链接
查看>>
MySQL 修改索引名称
查看>>
RabbitMQ基础概念详细介绍
查看>>
《设计模式那点事》 - 书摘精要
查看>>
Yii-数据模型 自定义数据,数据库插入,修改方法
查看>>
献给初学者:谈谈如何学习Linux操作系统
查看>>
树莓派3学习笔记(6):常用的Linux命令
查看>>
Active Directory系列之用Veritas创建MSI文件
查看>>
"EXT QPI LINK 2" error的解决方法 IBM System x3850 X5shangxl@dc
查看>>
将表转javabean(基于mysql)
查看>>
IDEA下载激活配置
查看>>
vim配置文件
查看>>
Vuex从入门到精通(一)
查看>>
JAVA中int、String的类型转换
查看>>
bash及其特性
查看>>
CentOs6.5上安装MySQL-Cluster 7.3.4
查看>>
typedef
查看>>
Servlet
查看>>
golang中发送http请求的几种常见情况
查看>>