NYOJ 1057 寻找最大数(三)(贪心)
2017-04-22 21:21
295 查看
寻找最大数(三)
时间限制: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
思路:思路很简单,就是从第一位开始,在m次交换范围内与最大值交换,直到到最后一位
有两个点要注意:
1.是m大于给定数字的长度
2.是m小于给定数字的长度
代码:
#include<stdio.h> #include<string.h> using namespace std; void swap(int &a,int &b) { int temp; temp=a; a=b; b=temp; } int main() { char str[20]; int num[20]; int vis[20]; int n,m; while(~scanf("%s%d",str,&m)) { int n=strlen(str); memset(num,0,sizeof(num)); for(int i=0;i<n;i++) { num[i]=str[i]-'0'; } int i=0; while(m>0) { if(i>=n) break; int index=i; int max=num[i]; for(int j=i;j<=n&&(j-i<=m);j++)//保证在允许交换的范围内,且不超过交换次数m { if(num[j]>max) { max=num[j]; index=j; } } if(i!=index)//初末位置不相同 { m-=(index-i);//减去当前交换次数 for(int j=index;j>i;j--)//交换 swap(num[j],num[j-1]); } i++; } for(int i=0;i<n;i++) printf("%d",num[i]); printf("\n"); } }/*
测试数据:
/*测试数据*/ 332 55 7908376 81 26412 78 7803299 17 1055669685993329 93 1695679945 4 244433 54 87246471881 22 586722803 73 5934693612 54 577045287 69 402047808436 49< 19b27 /span> 7710972916361 96 1441930458533879 86 9278750186997489 62 4152830322935739 96 2803661015451 69 42062923624 22 9463775138 45 415486594857383283 51 889706517279 19 1090147241 34 678641 12 9303178346 11 697115604467939 92 1707 28 10448590692 89 2082513 33 31218337287390984 92 7950947886 36 18134219311867682 35 3121 22 862082035928152425 62 62905565804437 18 69181438015349 86 92932344922189532 39 774802576052608 98 798626633856 78 17099586320 100 13089718225313 88 50358932560297 42 668074941972 34 476188628924250 29 90686297914 54 10550 87 6983865 60 1253460 50 37320 7 79307140391735 42 685562691855151 11 7081826251 97 208511587832 89 6002535353 63 46704582532597668 95 868026756694756761 7 36460279294 48 3787919417378 45 541343 51 8845076 45 899 74 44824256769504557 16 8476615 17 6089536743883 37 9450 32 299206579985798 15 4493 39 710733 35 38 20 1058919329733848758 27 893699 90 143276 56 104954098377032050 73 81332 54 1268 14 672901 85 70563227634 52 4518688270037998 5 91373792774 85 5408861 84 9194561 32 3071161571 34 21382915589 53 718646619 25 913619909696679541 16 81672 64 10042703698551 49 21301 55 1878156341854856 6 3969 49 709327475802 59 3753781 11 437036 52 764835339699678983 98 25147884 30 1111586949668051 36 271103729403 36 825511 5 79748468235300 41 55998613859220091 8 195300690839678 42 /*输出结果*/ 332 9877630 64221 9987320 9999866655533210 9651679945 444332 88877644211 887653220 9966543321 877755420 887644432000 9977766321110 9988755444333110 9999888777654201 9987554333322210 8665543211100 96644222032 9877654331 988887544165453323 998877651027 9744211100 876641 9873310346 999776665443110 7710 99865442100 8532210 99888774333322110 9988776540 98884312113116762 3211 988865554322221002 98665525004437 99886544331110 99998542323422132 887776655422000 988766665332 99876532100 98875333221110 99876553320502 998776644210 988876642214250 99987664210 55100 9886653 6543210 73320 99777543331100 986655621855151 8876522110 888755322110 6555333200 98877666555443220 887660256694756761 99766443220 9988777743311 544331 8876540 998 98454242676504557 8766541 9888766543330 9540 999922605785798 9443 773310 83 9998751013233848758 999863 764321 998775544332100000 83321 8621 976210 77665433220 8546188270037998 99777743321 8865410 9965411 7765311110 99885532211 987666411 999963110696679541 87621 98765541200031 32110 8875116341854856 9963 987775432200 8775331 764330 999988877666543333 88754421 9988611511466051 977433221100 855211 98877654433200 99865513859220091 999887153006036
*/
相关文章推荐
- nyoj 1057 寻找最大数(三) 贪心
- nyoj 1057寻找最大数(三) 贪心
- NYOJ 1057 寻找最大数(三) (贪心)
- 【贪心】 nyoj1057寻找最大数(三)
- nyoj 1057 寻找最大数(三)(贪心)
- NYOJ 1057 寻找最大数(三)(贪心)
- nyoj--1057--寻找最大数(三)(贪心)
- nyoj--1057--寻找最大数(三)(贪心)
- NYOJ-851寻找最大数(二),栈贪心!
- nyoj 1057 寻找最大数(三)
- NYOJ448_寻找最大数【贪心】
- 寻找最大数 NYOJ 贪心
- Num 27 : NYOJ : 0448 寻找最大数 [ 贪心 ]
- NYOJ448. 寻找最大数(贪心)
- nyoj 448 寻找最大数(贪心)
- NYOJ 448 寻找最大数 (贪心)
- nyoj448寻找最大数(贪心)
- nyoj 448 寻找最大数(贪心专题)
- NYOJ448寻找最大数,贪心~~
- NYOJ 1057 寻找最大数(三)