首页 > 解决方案 > 算法不适用于某些输入

问题描述

我是编程新手,我在一个网站上看到一个问题来练习。我被要求创建一个采用正整数的算法,比如说n。如果n为偶数,则算法将n除以 2。如果n为奇数,则将n乘以3 并加 1。重复此操作直到得到n = 1。例如, n =3,输出将为 3 > 10 > 5 > 16 > 8 > 4 > 2 > 1 我的代码如下所示:

import java.util.*;
public class practice {
    public static void solve(int n){
        while(n > 1){
            System.out.print(n + " ");
            if(n % 2 == 0){
                n=n/2;
            }else{
                n=(3*n)+1;
            }
        }
        System.out.print(n);
    }
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int input = keyboard.nextInt();
        solve(input);
    }
}

(编辑:最后一个输出假设为 1,但我在下一个输入中得到随机负数):138367 270271 665215 704511 我不知道我做错了什么......

标签: java

解决方案


我认为int在一些计算后尝试使用给定的代码long

import java.util.*;
public class practice {
    public static void solve(long n){
        while(n > 1){
            System.out.print(n + " ");
            if(n % 2 == 0){
                n=n/2;
            }else{
                n=(3*n)+1;
            }
        }
        System.out.print(n);
    }
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        long input = keyboard.nextLong();
        solve(input);
    }
}

推荐阅读