华为第一题一直卡在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

相关推荐

渐好:软光栅真的写明白了吗,既然是软渲那技术栈不应该使用OpenGL,光追和bvh既不算什么高级渲染技术更不应该属于软渲的内容,git那个项目没啥用,建议把前两个项目重新组织一下语言,比如软渲染那个项目 冯着色和msaa、贴图这几项分开写,写的到位点,如果你还学过光追那就单独写出来,如果没把握考官问你答不上来就别写给自己找麻烦,在技术栈那一栏简单提一下自己学过就行,这样杂的放在一起不太严谨,个人愚见.
点赞 评论 收藏
分享
04-03 11:37
武汉大学 Java
高斯林的信徒:武大简历挂?我勒个骚岗
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客企业服务