PAT 乙级 1001 害死人不偿命的(3n+1)猜想 (15分) 简单

在这里插入图片描述

做法一(JAVA&C++):

import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int sum = 0;
        while(num != 1) {
    
    
            if (num % 2 == 0) {
    
    
                num = num / 2;
                sum++;
            } else {
    
    
                num = (3*num+1)/2;
                sum++;
            }
            
        }
        System.out.println(sum);
    }
}
#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int n;
	scanf("%d",&n);
	int step=0;
	while(n!=1){
    
    
		if(n%2==0){
    
    
			n=n/2;
		}
		else if(n%2==1){
    
    
			n=(3*n+1)/2;
		}
		step++;
	}
	
	printf("%d\n",step);
	return 0;
} 

做法二:

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int n;
	scanf("%d",&n);
	int step=0;
	 
	while(n!=-1){
    
    
		if(n==1){
    
    
			break;
		}
		if(n%2==0){
    
    
			n=n/2;
		}
		else if(n%2==1){
    
    
			n=(3*n+1)/2;
		}
		step++;
	}
	printf("%d\n",step);
	return 0;
} 

Tips:

	法1:while(n!=1)
	法2:while(n!=-1){...if(n==1) break;...}

猜你喜欢

转载自blog.csdn.net/weixin_44926962/article/details/109539395