您的位置:首页 > 其它

寻最大数-南阳OJ-448

2017-06-07 00:59 176 查看
最近刷题一直被虐 , 扎心了 ,  不过总有一天我会翻盘的 !


寻找最大数

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


题目的简单,易懂  , 其实答案也不会太难 , 只是自己没有好好思考 , 学者把数学的思想运用到解决问题 , 既要经验 , 也不能盲目经验 !

假设  : 有 数组
ch[0] , ch[1] , .......ch[i-1] , ch[i]  , ch[i+1].........ch[a-1] , ch[a]  , ch[a+1] , .............ch[j-1] , ch[j] , ch[j+1] ..........ch
;


若 第 a 个取出后 , 数列值最大 , 则 :        ch[0] , ch[1] , .......ch[i-1] , ch[i]  , ch[i+1].........ch[a-1] , ch[a+1] , ..........................ch[j-1]
, ch[j] , ch[j+1] ...........ch
;


当取 ch[j] ( j > a) 时 ,
ch[0] , ch[1] , .......ch[i-1] , ch[i]  , ch[i+1].........ch[a-1] , ch[a] , ch[a+1] , .............ch[j-1] , ch[j+1] ......................ch
;


则要求 ch[a+1] > ch[a] 

若 第 a 个取出后 , 数列值最大 , 则 :    ch[0] , ch[1] , .......ch[i-1] ,ch[i]  , ch[i+1].........ch[a-1] , ch[a+1] , ...........................ch[j-1]
, ch[j] , ch[j+1] ..........ch
;


当取 ch[i] ( i < a) 时 ,      ch[0] , ch[1] , .......ch[i-1] ,ch[i+1].....................ch[a-1] , ch[a]  ,
ch[a+1] , .............
ch[j-1] , ch[j] , ch[j+1] ...........ch
;


则要求 ch[i+1] > ch[i]

很明显这是一个迭代的过程 , 也就是从最高项找 a[i] < a[i+1] , 并且删除 a[i] ; 

那么代码就很容易被写出来了.

 int T;
int i , j , m;
int len , flag;
char  c ,ch[105];

cin >> T;
getchar();
while(T--)
{
scanf("%s%d" , ch , &m);

while(m--)
{
len = strlen(ch);
for(i=0 ; i<len-1 ; i++)
if(ch[i+1]>ch[i])   break;
for(i ; i<len-1 ; i++)	//新建数组
ch[i] = ch[i+1];
ch[len-1] = '\0';
}

printf("%s" , ch);
if( T )
cout << endl;
}

或许偶然就能发先规律,但是不能真正的弄明白,还是心虚,虽然这样做事, 是很浪费时间 , 希望我这样做,能够有收获 , 毕竟我们都是在解决问题的过程中, 寻找突破,

深夜写代码, 由于没有考虑到机械键盘的声音 和光亮, ,吵到了室友 , 真心的说声对不起 , 以后会注意的  , 熬夜千万不能使用机械键盘和开太亮的光,不过学习盲打 , 其实也是一件挺有意思的事 , 不管怎样 , 人生就是在面临问题和想办法解决问题的途中 , 不断的突破自我 ,

晚安!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: