【问题标题】:Smallest number with digits product of nn的数字乘积的最小数
【发布时间】:2017-07-17 13:57:10
【问题描述】:

我需要找到数字乘积等于给定数字的最小数字。

import java.util.Scanner;

class timus_1014_2 {

    public static void main(String[] args){
        int[] arr = new int[10]; // eskan ban@  chem imanum inchi a statik,
        int prod = 1;
        int j = 0;

        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        for (int i = 2; i < 10; ++i){
            if (n % i == 0) {
                arr[j] = i;
                j++;
            }
        }
        prod =  prod * arr[j];

        System.out.print(prod);

    }
}

逻辑有问题,当我输入10 时,它应该给出25,但它给出了0。请给出如何让程序找到一个数字的想法,其中数字产品是给定的数字。

【问题讨论】:

  • 不应该 prod 是静态属性或 prime 的局部变量吗?您的代码无法编译。
  • 是的,我的代码无法编译,我不知道该怎么办
  • @halu 你能举例说明需要什么吗?
  • 所以,如果输入是 10 - 我们得到 25,因为数字乘积为 10 的最小整数是 25
  • @halu 检查我的解决方案

标签: java


【解决方案1】:

如果我正确理解了您的问题,您需要一个数字乘积等于数字 N 的数字。既然您要求使用新算法,您可以查看以下代码。

逻辑:

注意:对于质因数小于10的数

  1. 从 9 -> 2 中获取所有因数
  2. 添加到列表
  3. 反向打印或使用堆栈代替列表
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter number");
        int num = in.nextInt();

        List<Integer> lst = new ArrayList<>();

        for (int p = 9; p >= 2; p--) {
            while (num % p == 0) {
                num /= p;
                lst.add(p);
            }
        }

        String smallestNumber = "";
        for (int i = lst.size() - 1; i >= 0; i--) {
            smallestNumber = smallestNumber + lst.get(i);
        }
        System.out.println("Smallest number : " + smallestNumber);
    }
}

输出:

Enter number
10
Smallest number : 25

Enter number
144
Smallest number : 289

Enter number
12
Smallest number : 26

【讨论】:

  • 谢谢,我还没有走得更远,但我会尝试得到这个,我有问题错误:(13、43)java:-source 1.6 中不支持菱形运算符(使用 -源 7 或更高版本以启用钻石运算符)
  • @halu 我使用了 java 7。对于 java 6,只需将 line 替换为 List lst = new ArrayList();
  • 以144为例,289不是最小的数吗?
  • @Athmos 谢谢,我修好了。忘记根据算法将 2 分组为 8。
  • 还有一些问题,考虑输入 12。您的算法将返回 '34',但可能的最小结果是 '26'。
【解决方案2】:

我建议你看看每个错误是一个一个修复它。我还建议您使用 IDE,它会向您显示错误并在您输入时帮助确保您没有大量错误,并且您可以根据您的更正查看这些错误是否消失。

顺便说一句,通常当您将数组用于一小段代码时,它通常可以被消除,因为我怀疑它可以在您的情况下被删除。

【讨论】:

    【解决方案3】:

    静态方法不能访问类的非静态成员。 在您的情况下, prod 是类的成员变量,但不是静态的。要修复错误,请尝试将 prod 设为静态。

    private static int prod = 1;
    

    如果没有其他方法使用它,我更愿意将其设为局部变量。

    【讨论】:

      【解决方案4】:

      这里的问题是你需要创建一个特定类的对象来调用与之关联的特定方法

      import java.util.Scanner;
      
      class DigPro {
      static int[] arr = new int[10]; // eskan ban@  chem imanum inchi a statik,
      int prod = 1;
      public static void main(String[] args){
      Scanner in = new Scanner(System.in);
      DigPro obj = new DigPro();
      obj.prime(in.nextInt());
      
      }
      
      
      
      public void prime(int n){
      for (int i = 1; i < 10; ++i){
         for (int j = 0; j < 9; ++j) {
             if (n % i == 0) {
      
                 arr[j] = i;
      
             }
         prod =  prod * arr[j];
         }
      
      }
      System.out.print(prod);
      }
      
      }
      

      在这里,您需要创建一个对象,比如 DigPro 类的 obj,然后使用该对象调用 prime(int n) 方法。此外,您的除法从零开始,变为一

      【讨论】:

      • 谢谢,我没提过,但还是会带来3个错误,我还是有静态和非静态的问题
      • 试试我在这里发布的代码。它可以正常工作。虽然我不知道你想达到什么目的。
      • Error:(24, 12) java: non-static variable prod cannot be referenced from a static context 这样的错误发生
      • 然后使用一个对象,在我的例子中是 obj 和 prod。例如 System.out.println(obj.prod);它会起作用,否则你在某处做错了
      【解决方案5】:

      在上面的代码中,您在将值分配给arr[j] 之后增加了j。您应该执行以下操作:-

      prod = prod * arr[j-1];
      

      在这里,它会将 prod 与更新的最后一个数组相乘。这就是为什么你得到零。对于您的另一个问题,find the minimum number which digit numbers product is equal to a given numlink有类似的答案。

      【讨论】:

        【解决方案6】:

        由于这实际上是一个非常有趣的问题,所以我花时间为所有可能的整数输入提出了一个正确的解决方案。

        import java.util.*;
        
        public class Main{
        
            public static void main(String[] args) {
                System.out.println("Enter number:");
                int number = new Scanner(System.in).nextInt();
        
                Stack<String> factors = new Stack<>();
                if(number==0){
                    factors.push("0");
                }else if(number==1){
                    factors.push("1");
                }else{
                    for(int f=9;f>1;f--){
                        while(number%f==0){
                            factors.push(Integer.toString(f));
                            number/=f;
                        }
                    }
                }
        
                if(number<0){
                    factors.push("-");
                }
        
                if(number>9){
                    System.out.println("This is impossible.");
                }else{
                    System.out.println("Smallest Number:");
                    while(!factors.empty()) System.out.print(factors.pop());
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2014-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多