华为第一题一直卡在70%,求大佬们指出我的错误

package one;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();

            int a = n % 9;
            int b = n % 4;
            int c = a % 4;
            if (a != 0 && b != 0 && c != 0 || n < 4) { //肯定没有解
                System.out.println(-1);
                continue;
            }


            int min = (n / 4) + 2;//初始化
            boolean flag = false;
            for (int i = 0; i <= (n / 4); i++) {
                for (int j = 0; j <= (n / 9); j++) {
                    if ((4 * i + 9 * j) == n) {
                        flag = true;
                        if ((i + j) < min) {
                            min = i + j;
                        }
                    }
                }
            }
            if (flag) {
                System.out.println(min);
            } else {
                System.out.println(-1);
            }

        }
    }
}

#华为##笔试题目#
全部评论
vector<int> tmp(n+1, 10000);     tmp[4] = 1;     tmp[9] = 1;     for(int i=10; i<n+1; ++i)     {         tmp[i] = 1 + min(tmp[i-4], tmp[i-9]);     }     if(tmp[n] > 10000)         cout << -1 << endl;     else     {                  cout << tmp[n] << endl;     }     
点赞 回复 分享
发布于 2019-09-04 21:29
楼主 lc 518 #include <iostream> #include <vector> using  namespace std; int main(){     int n; cin >> n;     vector<int> dp(n + 1, INT_MAX);     vector<int> dingzis{4, 9};     dp[0] = 0, dp[4] = 1, dp[9] = 1;     for(auto dingzi : dingzis){         for(int j = dingzi; j <= n; j++)             if(dp[j - dingzi] != INT_MAX)                 dp[j] = min(dp[j], dp[j - dingzi] + 1);     }     if(dp[n] == INT_MAX)         cout << -1 << endl;     else         cout << dp[n] << endl; }
点赞 回复 分享
发布于 2019-09-16 00:41
感觉数学逻辑错了, int func(int n){ if(n<4 || (n>4 && n<7)) return -1; int cnt=n/9; if( n % 9 == 0 )  return cnt; while(cnt!=0){ int lst=n-cnt*9; cout<<lst<<endl; if(lst%4 == 0){ cnt+=lst/4; cout<<cnt<<endl; return cnt; } else cnt--; } if(n%4 == 0){ cnt=n/4; return n/4; } return -1; }
点赞 回复 分享
发布于 2019-09-04 21:16
# Python动态规划解法,比较通用,题目类似找零钱问题 import sys n = int(sys.stdin.readline().strip()) def buy_nails(nails, target):     dp = [target + 1] * (target + 1)     # 初始化很重要     dp[0] = 0     for i in range(1, len(nails) + 1):         for j in range(1, target + 1):             if j >= nails[i - 1]:                 dp[j] = min(dp[j], dp[j - nails[i - 1]] + 1)     min_num = dp[-1]     if min_num < target + 1:         return min_num     else:         return -1 nails = [4, 9] dp = buy_nails(nails, n) print(dp)
点赞 回复 分享
发布于 2019-09-05 13:12
为什么我题目和你们不一样
点赞 回复 分享
发布于 2019-09-04 23:02
直接暴力两个循环不就出来了么
点赞 回复 分享
发布于 2019-09-04 21:33
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {  int n;  cin >> n;  vector<int> dp(n + 1, 0);  dp[4] = 1;  dp[9] = 1;  for (int i = 4; i <= n; ++i) {   if (dp[i] > 0) {    if (i + 4 <= n) {     if (dp[i + 4] == 0) dp[i + 4] = dp[i] + 1;     else dp[i + 4] = min(dp[i + 4], dp[i] + 1);    }    if (i + 9 <= n) {     if (dp[i + 9] == 0) dp[i + 9] = dp[i] + 1;     else dp[i + 9] = min(dp[i + 9], dp[i] + 1);    }   }  }  if (dp[n] == 0) cout << -1 << endl;  else cout << dp[n] << endl;  return 0; }
点赞 回复 分享
发布于 2019-09-04 21:30
用动态规划做吧
点赞 回复 分享
发布于 2019-09-04 21:24
不知道这个为什么只有10% #include <iostream> using namespace std; int QuickSort(int n) {  if (n<0 || n>200)   return -1;  int sum = 0;   int cur =n%9;   sum = n / 9;   if (cur == 0)    return sum;   if (cur % 4 == 0)   {    sum += (cur / 4);    return sum;   } else {   while (cur < n)   {    sum -= 1;    cur += 9;    if (cur % 4 == 0)    {     sum += (cur / 4);     break;    }   } }   return sum==0?-1:sum;     } int main() {  int n;  cin >> n;  int res = QuickSort(n);  cout << res; }
点赞 回复 分享
发布于 2019-09-04 21:19
点赞 回复 分享
发布于 2019-09-04 21:17
我是先取9,然后回退 :就是-9 -9-9 。 期间看看可不可以被4整除
点赞 回复 分享
发布于 2019-09-04 21:16
直接按照0到总数地板除4循环
点赞 回复 分享
发布于 2019-09-04 21:15
内存溢出了,我用Python也是,然后使用缓存加了个@functools.lru_***(None) 就AC了
点赞 回复 分享
发布于 2019-09-04 21:15

相关推荐

点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
不对是145个人…嗯…&nbsp;大家都没发现秋招提前批来了嘛..笑死我了
牛客39712426...:投了也是浪费时间,之前投米实习,除了浪费我时间写笔试题没有任何反馈,懒得投了
26届校招投递进展
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

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