寻最大数-南阳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的位数)
输出每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
样例输入
样例输出
题目的简单,易懂 , 其实答案也不会太难 , 只是自己没有好好思考 , 学者把数学的思想运用到解决问题 , 既要经验 , 也不能盲目经验 !
假设 : 有 数组
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] ;
那么代码就很容易被写出来了.
或许偶然就能发先规律,但是不能真正的弄明白,还是心虚,虽然这样做事, 是很浪费时间 , 希望我这样做,能够有收获 , 毕竟我们都是在解决问题的过程中, 寻找突破,
深夜写代码, 由于没有考虑到机械键盘的声音 和光亮, ,吵到了室友 , 真心的说声对不起 , 以后会注意的 , 熬夜千万不能使用机械键盘和开太亮的光,不过学习盲打 , 其实也是一件挺有意思的事 , 不管怎样 , 人生就是在面临问题和想办法解决问题的途中 , 不断的突破自我 ,
晚安!
寻找最大数
时间限制: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; }
或许偶然就能发先规律,但是不能真正的弄明白,还是心虚,虽然这样做事, 是很浪费时间 , 希望我这样做,能够有收获 , 毕竟我们都是在解决问题的过程中, 寻找突破,
深夜写代码, 由于没有考虑到机械键盘的声音 和光亮, ,吵到了室友 , 真心的说声对不起 , 以后会注意的 , 熬夜千万不能使用机械键盘和开太亮的光,不过学习盲打 , 其实也是一件挺有意思的事 , 不管怎样 , 人生就是在面临问题和想办法解决问题的途中 , 不断的突破自我 ,
晚安!
相关文章推荐
- 南阳oj448 寻找最大数
- 南阳OJ448寻找最大数
- 南阳 oj 448 寻找最大数
- 南阳oj448:寻找最大数
- 南阳oj 1057 寻找最大数(三)
- 南阳448 寻找最大数
- 【南阳OJ 119】士兵杀敌(三)(线段树)(最大值&最小值问题 模板题)
- 南阳OJ-最大和
- [南阳OJ-No.31]5个数求最值|设计一个从5个整数中取最小数和最大数的程序
- 南阳oj119--士兵杀敌(三)(求最大值和最小值的差值)
- 南阳oj742子串和在续(最大m段子序列和+动态规划)
- 南阳题目448-寻找最大数
- 南阳oj NYOJ 寻找最大数 题目236
- 南阳理工OJ_题目448 寻找最大数
- 南阳448 寻找最大数
- 福州oj--2232--炉石传说(最大匹配||最大流)
- oj刷题第一批E 对象数组求最大值
- 数的长度【南阳 oj 题目69】
- NYOJ 448 寻找最大数
- 南阳OJ--题目57:6174问题