nyoj448 寻找最大数

寻找最大数

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

/*

贪心。

局部最优的得到全局最优。

解题思路:

第一次查找先从 s[0] - s[m]之间找到最大值,并记录下id。

第二次则从id+1的位置开始查找,在s[id+1] - s[m+1]之间找到最大值,记录下位置。

按此方法,一直找到字符串末尾,即m==lens-1。

*/

#include <cstdio>

#include <cstring>

using namespace std;

const int maxn  = 110;

char s[maxn];

int lens;

int main()

{

int t,i,m,id;

char ch;

scanf("%d",&t);

while(t--)

{

scanf("%s%d",s,&m);

lens = strlen(s);

id=0;

while(m<lens)

{

ch=s[id];

for(i=id;i<=m;++i)
//每次查找区间内最大的,记录下位置

{

if(s[i]>ch)

{

ch=s[i];

id=i;

}

}

printf("%c",ch);
//找到后直接输出即可

id++; //位置后移

m++; //长度后移

}

printf("\n");

}

return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-05 15:22:16

nyoj448 寻找最大数的相关文章

NYOJ448 寻找最大数 【贪心】

寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888 输入 第一行输入一个正整数T,表示有T组测试数据 每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数) 输出 每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数 样例输入

NYOJ-448 寻找最大数(贪心)

NYOJ-448 寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888 输入 第一行输入一个正整数T,表示有T组测试数据每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数) 输出 每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大

寻找最大数(nyoj448)(贪心)

寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888 输入 第一行输入一个正整数T,表示有T组测试数据 每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数) 输出 每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数 样例输入

寻找最大数(二)

寻找最大数(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 给你一个数字n(可能有前缀0). 要求从高位到低位,进行 进栈出栈 操作,是最后输出的结果最大. 输入 有多组测试数据. 对于每组数据,输入一个n(0<=n<=10^100). 输出 输出栈操作后的结果. 样例输入 789 75948 样例输出 987 98457 提示 (用0表示进栈,1表示出栈) 789 输出 987 过程是 000111 75948 输出 98457 过程是 000100111

NYOJ 寻找最大数

寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888 输入 第一行输入一个正整数T,表示有T组测试数据 每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数) 输出 每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数 样例输入

同时寻找最大数和最小数的最优算法以及寻找最大的两个数所需的最少比较次数

我们知道,在一个容量为n的数据集合中寻找一个最大数,不管用什么样的比较算法,至少要比较n-1次,就算是用竞标赛排序也得比较n-1次,否则你找到的就不能保证是最大的数.那么,在一个容量为n的数据集合中同时寻找最大数和最小数的最小比较次数是多少呢? 从一个容量为n的数据集合中同时找到最大数和最小数的最优方法是:首先让所有的元素参与两两比较,这样总共比较了n/2次,最大数肯定在胜者组中,最小数肯定在败者组中:然后从容量为n/2的胜者组中找到最大的数,最少要比较n/2 - 1次:同理,从容量为n/2的败

NYOJ448_寻找最大数【贪心】

寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888 输入 第一行输入一个正整数T,表示有T组测试数据 每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数) 输出 每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数 样例输入

nyoj寻找最大数(三)

 /*寻找最大数(三) 时间限制: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 99070

NYOJ 448 寻找最大数【贪心】

寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888 输入 第一行输入一个正整数T,表示有T组测试数据 每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数) 输出 每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数 样例输入