java代码求指正纠错

编程求n到m之前的所有完数,完数指的是除自身之外的所有因子之和等于这个数本身的数。请问为什么输出无结果呢?

img

你这双循环到底在干嘛呢?

import java.util.*;

public class PerfectNumber {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入n和m:");
        int n = input.nextInt();
        int m = input.nextInt();
        System.out.print(n + "到" + m + "之间的完数有:");
        for (int i = n; i <= m; i++) {
            int sum = 0;
            for (int j = 1; j < i; j++) {
                if (i % j == 0) {
                    sum += j;
                }
            }
            if (sum == i) {
                System.out.print(i + " ");
            }
        }
    }
}


  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/763979
  • 你也可以参考下这篇文章:Java解决有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
  • 除此之外, 这篇博客: 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数(算法学习,C+Java(在学ing)代码)中的 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 例如:
    
    输入:
    
    10
    1 2 3 4 5 6 7 8 9 10
    2
    输出
    9 10 1 2 3 4 5 6 7 8 
    
    
    

    C 代码

    #include<stdio.h>
    void convet(int* arr, int n);
    void Reverse(int *arr,int p,int q);
    
    int main()
    {
    	int* arr, n;
    	while (scanf("%d", &n) != EOF)
            //在输入回车换行后的空行位置,按 ctrl+z,再回车确认就是EOF咯
    	{
    		arr = (int*)malloc(n * sizeof(int));//申请空间
    		for (int i = 0; i < n; i++)
    			scanf("%d", arr + i);
    		convet(arr, n);
    		for (int i = 0; i < n; i++)
    			printf("%d ", arr[i]);
    		free(arr);//释放空间
    	}
    	return 0;
    }
    
    void convet(int* arr, int n)
    {
    	int m;
    	scanf("%d",&m);
    	if (m<0 || m>n)
    		return ;
    	else
    	{
    		Reverse(arr, 0, n - m - 1);//先将前n-m个数逆置
    		Reverse(arr, n - m, n - 1);//将后面m个数逆置
    		Reverse(arr, 0, n - 1);//最后再逆置
    	}
    }
    
    void Reverse(int* arr, int p, int q)//将p~q的数逆置
    {
    	int temp;
    	for (int i = p, j = q; i < j; i++, j--)
    	{
    		temp = arr[i];
    		arr[i] = arr[j];
    		arr[j] = temp;
    	}
    }
    
    

    Java 代码

    import java.util.Scanner;
    
    class Reverse1{
    	static void reverse(int arr[],int n,int m) {
    		int a[]=new int[m];//将需要后移的数字存在这个数组当中
    		for(int i=0;i<m;i++) {
    			a[i]=arr[n-m+i];
    			//存需要后移的数字
    		}
    		for(int i=n-1;i>=m;i--) {
    			arr[i]=arr[i-m];
    			//将前面n-m个数字后移
    		}
    		for(int i=0;i<m;i++) {
    			arr[i]=a[i];
    			//将那m个数字重新赋值过来
    		}
    	}
    }
    
    public class NumberBackmove {
    	public static void main(String[] args) {
    		Scanner input =new Scanner(System.in);
    		int n=input.nextInt();
    		int arr[]=new int[n];
    		for(int i=0;i<arr.length;i++) {
    			arr[i]=input.nextInt();
    		}
    		int m=input.nextInt();
    		Reverse1.reverse(arr, n, m);
    		for(int i=0;i<arr.length;i++) {
    			System.out.print(arr[i]+" ");
    		}
    		
    	}
    }
    
    

    今天学到了学到了,C的做法蛮好的我觉着,我都没想到,靠着大佬的解析写了出来想通了

    如有错误恳请大佬指点,感激不尽,溜了溜了~~

    算法题目来源:https://www.dotcpp.com/