-1

1 から n までの完全数を出力するアルゴリズムを作成します。数が完全かどうかを判断するには、その数よりも小さい数のすべての要素を合計します。合計が数と等しい場合、それは完全です。

import java.util.Scanner;

public class Assign_6 {

    public static void main(String[] args){

        int num,number,sum=0,factor;

        System.out.print("Enter Number");
        Scanner keyboard = new Scanner (System.in);

        number=keyboard.nextInt();

        for (num=1;num<number;num++){
            for(factor=1;factor<number;factor++){
                if(num%factor==0){
                    sum= sum+factor;
                }
                if(sum==num){
                    System.out.println(sum);
                }
                sum=0;
            }

        }
    }
}

出力: 24

何も出力されません。何が悪いのかわからない。どこが間違っていますか?while、for、else-if ステートメントしか使用できません。

4

8 に答える 8

5

(sum==number の場合だけでなく) すべての数値の合計を出力すると、それを把握することができます。

(2 つの手がかり: 適切なインデントは、一致する { } のペアをすばやく見つけるのに役立ちます。また、変数にわかりやすい名前を付けることも重要です。)

于 2011-02-21T15:28:43.523 に答える
1

プログラムを紙になぞります。sum 変数に問題があります。

于 2011-02-21T15:46:10.243 に答える
0

この宿題には2つのforループがあり、それらは異なることを行うため、コーディングを開始するときにループを混乱させるのは非常に簡単です。ヒントとして、プログラムが機能しない理由は、forループから別のforループに何かを置き忘れたためです。

あなたは正しい方向に進んでいますが、ループの場合は個別に考えることができるようにしてください。つまり、内側のループの意図された目的は何ですか?それは実際に何をしているのですか?外側のループの意図された目的は何ですか、そしてそれは実際に何をしていますか?内側のループで、numの係数を合計しようとしているようです。それは実際には要因を要約しているだけですか、それともあなたが見落としていたいくつかの副作用/エラーがありますか?

于 2011-02-22T22:01:28.717 に答える
0
public class PerfectNumber {
public static void main(String args [])
{

    perfectNumber(6,200);
}

static void perfectNumber(int num1, int num2){

    int i; int j; int sum=0;

     for (i=num1;i<=num2;i++){
            for(j=1;j<=i/2;j++){
                if(i%j==0){
                    sum= sum+j;
                }

            }
            if(sum==i){
                System.out.println("The perfect number between two numbers: "+sum);
            } 
            sum=0;
        }


    }

}

于 2016-08-29T06:39:30.627 に答える
0

次のコードを試してみてください。

import java.util.Scanner;

public class Test
{
   public static void main (String[] args)
   {
       Scanner in = new Scanner(System.in);
       int n = in.nextInt();
       for(int j=1; j<n; j++)
       {
           int counter = 0;
           for (int i = 1; i < j; i++)         
           {              
               if(j%i ==0)
               {
                   counter = counter + i;
               }
           }
           if(counter == j)
               System.out.println(j);//here you can print j or counter
       }
   }
}
于 2014-11-27T10:44:55.823 に答える
0
import java.util.*;
    class PerfectNumber

{

public static void main(String[]args)
{
    System.out.println("Enter the number upto which you want to print the perfect number");
    Scanner scan=new Scanner(System.in);
    int n=scan.nextInt();
    for(int i=1;i<=n;i++)
    {
        int sum=0;
        for(int j=1;j<=i;j++)
        {
            if(i%j==0)
            sum=sum+j;
        }
        if(sum==(2*i))  //checks for perfect number
        System.out.println(i);
    }

    }
}
于 2017-04-25T04:57:23.807 に答える