求大神解答CVTE数据切割那个编程题答案

如题#广州视源电子科技股份有限公司#
全部评论
import java.util.Scanner; /*  * 题目:给定一个整数n和一个整数m,将n按照位分割成多个数字,使得这多个数字的和最接近m,  *     例如n=654321,m=50,则最大值为48(6+5+4+32+1)  * */ public class Main {     // 求最大值     public static Integer plimit(Integer n, Integer m) {         if (n < m)             return n;         Integer add = 0; //把所有的位加起来的和         Integer maxNum = 0;   //最终所求结果         Integer count = 0;    //辅助计数器,计算每个子数组中按位加起来的的和         Integer madd = 0;    //辅助计数,把每个子数组中的数字表示成十进制         Integer mc = 0;      //辅助计数,把每个子数组中的数字表示成十进和其他位按位加起来的总和         int a = 0, b = 0;    //标记子数组第一位和最后一位的指针         String nstr = n.toString();    //将n转化成字符串         String mstr = m.toString();   //将m转化字符串         int nlength = nstr.length(); // n的长度         int mlength = mstr.length(); // m的长度         int[] narr = new int[nlength]; // 新建一个数组用来保存num每一位的数字         for (int i = 0; i < nlength; i++) {             Character ch = nstr.charAt(i); // 遍历nstr将每一位数字添加到narr             narr[i] = Integer.parseInt(ch.toString());         }         for (int i = 0; i < nlength; i++) {             add += narr[i];         }         if (add < m){             for (int i = 2; i <= mlength; i++) {                 a = 0;                 b = i - 1;                 while (b < nlength) {                     for (int j = a; j <=b; j++) {                         //System.out.println("j="+j);                         count += narr[j];                         madd = madd + (int) (narr[j] * Math.pow(10, (b - j)));                         a++;                     }                     mc = (add - count) + madd;                     //System.out.println("mc="+mc);                     if (mc > maxNum && mc < m) {                         maxNum = mc;                     }                     b++;                     a = b - i + 1;                     madd=0;                     count=0;                     //System.out.println("a=  b="+a+" "+b);                 }             }         }         return maxNum;     }     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         Integer n = in.nextInt();         Integer m = in.nextInt();         System.out.println(plimit(n, m));     } } /* 例一:      输入:   654321   50      输出:   48   例一:      输入:   654321   661      输出:   600  */
点赞 回复 分享
发布于 2017-09-03 13:05
原来题目不一样
点赞 回复 分享
发布于 2017-09-02 23:27
多谢分享
点赞 回复 分享
发布于 2017-09-02 22:33
http://blog.csdn.net/xiao_dondon/article/details/77804072
点赞 回复 分享
发布于 2017-09-02 22:03
同求
点赞 回复 分享
发布于 2017-09-02 21:59

相关推荐

下北泽:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务