我的任务是找到最小的正整数,说“A”,这样“A”的数字乘积恰好等于N.
示例:假设我的N = 32 所以我的A将是48因为32的除数将是1,2,4,8,16,32,并且使得32的最小数字是4和8.所以输出是48。
我所做的是先读N,然后找到除数并将它们存储在一个列表中。和使用
if(l.get(i)*l.get(i+1)==N) {
sysout.print(l.get(i));
sysout.print(l.get(i+1));
但是我无法将数字设为最小值。如果没有匹配,我还需要打印为-1。
为此我做了:
if (l.get(i)*l.get(i+1)!=N) {
System.out.print(-1);
break;
}
但它最初只打印-1并中断。现在我被困在这里。请在下面找到我的代码:
我的代码:
int N=1;
Scanner in = new Scanner(System.in);
List<Integer> l = new ArrayList<Integer>();
System.out.println("Enter N: ");
if (N>=0 && N<=Math.pow(10, 9)) {
N = in.nextInt();
}
for (int i=1; i<=N;i++) {
if (N%i==0) {
l.add(i);
}
}
System.out.println(l);
for (int i=0; i<l.size()-1;i++) {
if (l.get(i)*l.get(i+1)==N) {
System.out.print(l.get(i));
System.out.print(l.get(i+1));
}
}
in.close();
亲切的帮助。感谢。
答案 0 :(得分:1)
你在找到N上的除数时走在正确的轨道上。我不打算为你编码(你会通过这样做来学习更多)但是这就是你所做的:除数将被排序已经如此循环arraylist首先添加并找到min。 所以1,2,4,8,16,32:Find 1 + 32,2 + 16,4 + 8;然后在这些中获得最大值。
这是为了让你入门:
int first = 0;
int last = l.size()-1;
while(first<last){
//Find min using Math.min;
++first;
--last;
}
快乐的编码!
无法抗拒。下面是一个快速的方法来做你想要的。在这里测试过 (https://ideone.com/E0f4X9):
public class Test {
static ArrayList<Integer> nums = new ArrayList<>();
public static void main(String[] args){
int N =32;
findDivisors(N);
int first = 0, a = 0, b = 0;
int last = nums.size()-1;
int results = Integer.MAX_VALUE;
while(first < last){
int sum = nums.get(first) + nums.get(last);
results = Math.min(sum,results);
a = nums.get(first);
b = nums.get(last);
first++;
last--;
}
System.out.println(a+" "+b);
}
private static void findDivisors(int n){
for(int i=1; i<=n; i++){
if(n%i == 0){
nums.add(i);
}
}
}
}
答案 1 :(得分:0)
显然,如果N <10则A = N
否则A必须包含多个数字。 A的每个数字都是N的除数.A的更高有效数字必须小于或等于较低有效数字。否则,可以更改数字的顺序以产生较小的数字。
例如A不能是523,因为数字可以重新排列为235,这是一个较小的数字。在这个例子中,我们有2&lt; 3&lt; 5。
观察#1:当看到A时,最小的数字位于前面,数字会越来越高。
观察#2,如果 a 和 b 的产品,则A永远不能包含两个数字 a 和 b >也是一个数字。例如,永远不会有2和3,而是必须有6代替。可能永远不会有三个2,而是必须是8个。
这表明在构建A时我们应该从N的最高可能除数开始(因为9总是优于2 3,依此类推)。然后我们应该把这个数字放在A的末尾。
所以,虽然N&gt;在图10中,找到N的最高除数 x ,其是单个数字(2&lt; = x &lt; = 9)。将此值 x 添加到A的末尾。将 x 除以N并继续循环。
示例:强>
N = 126,A =?
小于或等于9的最高可能除数 x 9 。所以9将成为A的最后一位数。
将N除以9并重复此过程。 N =9分之126= 14
现在N = 14,A =?9
小于或等于9的最高可能除数 x 7 。我们找到了A的倒数第二位数。
将N除以7并重复此过程。 N = 14/7 = 2。
现在N = 2,A =?79
N'LT; 10。所以 2 是A的第一个数字。
解决方案是A = 279