• nyoj--1057--寻找最大数(三)(贪心)


    寻找最大数(三)

    时间限制: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
    来源
    原创
    上传者

    TC_李远航


    低位大的数再多敌不过高位一个数,这道题表现的很明显,先从高位的部分找最大的数,然后放到高位,如果移动的次数没有用完,就接着平移

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	char a[55];
    	int k;
    	while(scanf("%s%d",a,&k)!=EOF)
    	{
    		int t;
    		int len=strlen(a);
    		char flog;
    		for(int i=0;i<len&&k!=0;i++)
    		{
    			t=i;
    			for(int j=i+1;j<=i+k&&j<len;j++)
    			if(a[t]<a[j])
    			t=j;//有k次机会,可以控制的长度也就有k,每一次遍历找到最大的数 
    			for(int j=t;j>i;j--)
    			{
    				flog=a[j];
    				a[j]=a[j-1];
    				a[j-1]=flog;
    			}
    			k-=t-i;//将t变换到i需要t-i次 
    		}
    		printf("%s
    ",a);
    	}
    	return 0;
    }



  • 相关阅读:
    Cookies 和 Session的区别
    List接口、Set接口和Map接口
    Java NIO:IO与NIO的区别
    NIO与传统IO的区别
    Java中堆内存和栈内存详解
    Java序列化与反序列化
    maven搭建
    深入研究java.lang.ThreadLocal类
    SQL 优化经验总结34条
    数据库事务的四大特性以及事务的隔离级别
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273692.html
Copyright © 2020-2023  润新知