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

9907000008001234*/

<span style="font-size:18px;">#include <stdio.h>
#include <string.h>
int main(){
    char temp,str[20];
    int k,len,mark,flag,j;
    while(scanf("%s %d",str,&k)!=EOF){
        len=strlen(str);
        if(k==0)
        {
            puts(str);
            continue;
        }
        for(int i=0;i<len;i++){
            temp=str[i],flag=1;
            for(j=i+1;j<=i+k&&j<len;j++){//贪心,从i+1到i+k寻找最大的数 并记录下序号
                if(str[j]>temp)
                temp=str[j],mark=j,flag=0;
            }
            if(!flag){
                for(int q=mark;q>i;q--)//一步一步相邻的交换。。第一次以为直接两个数交换位置,结果错了。。
                temp=str[q],str[q]=str[q-1],str[q-1]=temp;
                k=k-mark+i;
            }
            if(k==0)
            break;
        }
        puts(str);
    }
    return 0;
}  </span>

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

时间: 2024-11-05 02:24:22

nyoj寻找最大数(三)的相关文章

NYOJ 寻找最大数

寻找最大数 时间限制: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(可能有前缀0). 要求从高位到低位,进行 进栈出栈 操作,是最后输出的结果最大. 输入 有多组测试数据.对于每组数据,输入一个n(0<=n<=10^100). 输出 输出栈操作后的结果. 样例输入 789 75948 样例输出 987 98457 思路:贪心+栈:先找到最大的数字输出,然后再判断s1[n+1]位置的数字是否比栈顶的元素的数字大,(,要想输出的数值最大,每一位的数值都尽

NYOJ 1057 寻找最大数(三)(关于贪心算法的认识)

以前做贪心题目都第一步对数据进行从大到小的排序,大部分贪心题目的的处理方法也是这样.但是NYOJ的1057题,在解题中 并不需要排序,一时间都没有意识到是贪心题.在看了讨论区之后意识到要用贪心的思想,才解出题目.认识到贪心算法并非是排序后再处理的机械操作,而是从局部寻求最优解的思想. 原题如下: 寻找最大数(三) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数. 求这个新的整数的最大值

NYOJ 448 寻找最大数【贪心】

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

寻找最大数--nyoj题目448

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

Num 27 : NYOJ : 0448 寻找最大数 [ 贪心 ]

一道经典的贪心问题:如题: 寻找最大数 时间限制: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的败

NYOJ 整数划分(三)

整数划分(三) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 整数划分是一个经典的问题.请写一个程序,完成以下要求. 输入 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) 输出 对于输入的 n,k; 第一行: 将n划分成若干正整数之和的划分数. 第二行: 将n划分成k个正整数之和的划分数. 第三行: 将n划分成最大数不超过k的划分数. 第四行: 将n划分成若干个 奇正整数之和的划分数. 第五行: 将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