我正在编写一个简单的算法来求解Euler项目#5,但其中一个if语句不起作用。在findNumber()方法中,更改字段变量“divisibleNum”的if语句不会更改变量的值,因此每次编译时,输出总是1。
我试着回答“能被1到25的所有数字平均整除(无余数整除)的最小正数是多少?”
public class Least
{
private int divisibleNum;
public Least()
{
divisibleNum = 1;
}
public static void main(String[] args)
{
Least lst = new Least();
lst.findNumber();
lst.printNumber();
}
public void findNumber()
{
for(int i = 25; i<1; i--)
{
if(divisibleNum % i !=0)
divisibleNum*= i;
}
}
public void printNumber()
{
System.out.println(divisibleNum);
}
}
输出需要是可被1-25整除(包括)的最小正数,但每次只打印1。
所以,这实际上很有趣。不仅你的算法有缺陷,你的代码也有缺陷。你的算法总是会生成一个可以被给定数整除的数,但是只有在某些时候它才是最小的。首先,当前算法不起作用的原因是您得到了整数溢出(整数的变量不够大,无法存储该数字)。相反,您应该为此使用Long。其次,我冒昧地编写了一个新程序,它可以在100%的时间内找到通过c可以整除的最小数。它的工作原理是,如果你把每个数通过I,取该数的素因子分解,然后遍历所有的数字,对于每个素数,找到它的最大指数,就像这样,然后将所有这些相乘,得到最小的数字,可以被1到i整除。
import java.util.ArrayList;
import java.util.Arrays;
public class Least{
private int c;
private Long div;
public Least(){
c=25;
div=1L;
}
public static void main(String[] args){
Least lst = new Least();
lst.smallestdiv();
lst.printNumber();
}
public void printNumber(){
System.out.println(c);
}
public int[] genPrime(int x){
ArrayList<Integer> y = new ArrayList<Integer>();
y.add(2);
for(int i = 3; i < x; i++){
boolean prime = true;
int z = 0;
while(z<y.size()&&y.get(z)<=sqrt(x)&&prime){
if(isDiv(i,y.get(z))){
prime=false;
}
z++;
}
if(prime){
y.add(i);
}
}
return IntegertoInt(y.toArray(new Integer[0]));
}
public boolean isDiv(int x,int y){return x%y==0;}
public boolean isDivthrough(int x, int y){
for(int i = 1;i<y;i++){
if(!isDiv(x,i)){
println(i);
return false;
}
}
return true;
}
public boolean isDiv(Long x,int y){return x%y==0;}
public boolean isDivthrough(Long x, int y){
for(int i = 1;i<y;i++){
if(!isDiv(x,i)){
println(i);
return false;
}
}
return true;
}
public int[] IntegertoInt(Integer[] x){
int[] y = new int[x.length];
for(int i = 0;i<x.length;i++){
y[i]=x[i];
}
return y;
}
public int[] pFactor(int x,int[] y){
int[] output = new int[y.length];
int z = x;
for(int i = 0;i<y.length;i++){
while(isDiv(z,y[i])&&z>1){
z=z/y[i];
output[i]++;
}
}
return output;
}
public void smallestdiv(){
int[][] y = new int[c-1][];
int[] primes = genPrime(c);
for(int i = 2;i<=c;i++){
y[i-2]=pFactor(i,primes);
}
for(int i = 0;i<primes.length;i++){
int largest = -1;
for(int k = 0;k<y.length;k++){
if(y[k][i]>largest){
largest=y[k][i];
}
}
//println(largest,primes[i],(int)pow((float)primes[i],(float)largest));
//println(output);
div*=(int)pow((float)primes[i],(float)largest);
}
}
}
它直接在我的网站上找到0个结果,而不是做echo$行有什么想法吗?我希望它从我的数据库(phpmyadmin)中提取,数据库名称是events\u table。
问题: 13195的质因数是5、7、13、29。 数字600851475143中最大的素因子是什么? 我发现这个很简单,但运行这个文件花了很长时间,已经运行了一段时间,我得到的最高数字是716151937。 这是我的代码,我只是要等待还是我的代码中有错误? }
if 语句,就是类似于「如果○○的话,做●●」,根据条件判断脚本的一部分是否执行的语法。 语法如下: if(expression) 语句或语句块 else 语句或语句块 第一个“语句或语句块”是当 expression 表达式的结果为真时执行的部分,第二个“语句或语句块”则是结果为假时执行的部分。如果不需要 else 以后的部分,可以省略。 例: if(a==b) inform("a和b相等
首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的
目前在学校做信息技术评估,我的else声明遇到了问题。 代码: 不管怎样,为什么在if语句为真的情况下还要使用else语句呢?
问题内容: 我对编程还比较陌生,最近开始学习Java,以便转向Android编程。我以为我会创建一个非常简单的计算器来练习,但是看来我的if语句不起作用。 我正在使用Eclipse IDE,并且在要求执行该操作之前,它运行良好。它会显示选项,但不会让我输入任何内容(我一直在用5乘以2进行测试)。 我搜索了类似的问题,并尝试了他们的建议,但似乎仍然行不通。我将不胜感激,我想这可能只是我正在做的一个简