cvte数字分割求大神贴一下代码学习一下 么么哒

如题
全部评论
用dfs,先发m拆分放进list里面,递归时候再取出来 public class findMax { int max; public int findMaxNumber(int m , int n) { max = 0; List<Integer> list = new LinkedList<>(); while (m > 0) { list.add(0,m%10); m = m/10; } getMax(list,0,n,0); return 0; } private void getMax(List<Integer> list, int i, int n, int sum) { if (sum > max && i == list.size()) { max = sum; } for (int j = i; j < list.size(); j++) { int a = 0; for (int k = i; k <= j; k++) { a = a*10 + list.get(k); } if (sum + a > n) { break; } getMax(list, j+1, n, sum+a); } } } /* 输入: 654122 111 输出: 110  */
点赞 回复 分享
发布于 2017-09-07 15:52
我刚刚写的,不知道对不对。可以参考一下,把所有可能的分割情况都算了一遍…… import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in);         while (in.hasNext()) {         int n = in.nextInt();         int m = in.nextInt();         List<Integer> list = new ArrayList<>();         String s = String.valueOf(n);         for(int i=0;i<s.length();i++){         list.add(s.charAt(i)-'0');         }         List<Integer> l = new ArrayList<>();         fon(0,list,l,m);         int min = -1;         for(int i : l){         if(i>min)         min = i;         }         System.out.println(min);         } } public static void fon(int sum,List<Integer> list,List<Integer> l,int m){ if(list.size() == 0) l.add(sum); else{ int temp = list.get(0); while(sum+temp <= m){ list.remove(0); fon(sum+temp,new ArrayList<Integer>(list),l,m); if(list.size() == 0) break; else{ temp = temp*10 + list.get(0); } } } } }
点赞 回复 分享
发布于 2017-09-02 21:42
上午刚帮别人写的 class Solution { public: int func(int numb1, int val) { string str = to_string(numb1); int res=0, restemp=0; funcCore(str, val, res, restemp, 0); return res; } private: void funcCore(string &str, int val, int &res,int &restemp,int start) { int len_str = str.size() - start; for (int i = 1; i <= len_str; ++i) { string temp = str.substr(start, i); restemp += atoi(temp.c_str()); funcCore(str, val, res,restemp,start + i); if (restemp <= val&&restemp > res) res = restemp; restemp -= atoi(temp.c_str()); } } };
点赞 回复 分享
发布于 2017-09-03 14:01
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(); String mstr = m.toString(); 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  */  
点赞 回复 分享
发布于 2017-09-03 12:39
我也不会,同求
点赞 回复 分享
发布于 2017-09-02 21:02
我也不会,同求
点赞 回复 分享
发布于 2017-09-02 21:01

相关推荐

hwwhwh:同双非,有大厂实习其实也没啥用,主要看运气,等就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务