PTA乙级练习题

PAT (Basic Level) Practice (中文)题


1001 害死人不偿命的(3n+1)猜想 (15分)

卡拉兹(Callatz)猜想:

对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?

输入格式:

每个测试输入包含 1 个测试用例,即给出正整数 n 的值。

输出格式:

输出从 n 计算到 1 需要的步数。

输入样例:

扫描二维码关注公众号,回复: 12232214 查看本文章

3

输出样例:

5

java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


//import java.util.Scanner;

public class BasicOne {
    
    

	public static void main(String[] args) throws NumberFormatException, IOException {
    
    
//		Scanner scanner = new Scanner(System.in);
//		int n = scanner.nextInt();
		
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(reader.readLine());
		
		int step = 0;
		
		while(n!=1) {
    
    
			
			if(n%2==0) {
    
    
				n = n/2;
				step++;
			}else {
    
    
				n = 3*n+1;
			}
		}
		
		System.out.print(step);
	}
}

python代码

n = int(input())
step = 0


while True:

    if n == 1:
        break

    if n%2 == 0:

        step+=1
        n = n/2

    else:

        n = 3*n+1    

print(step)

C++代码

# include<iostream>
using namespace std;

int main(){
    
    
    int n;
    int step=0;

    cin >> n;

    while(n!=1){
    
    

        if(n%2==0){
    
    
            step++;
            n=n/2;
        }else{
    
    
            n = 3*n+1;
        }
    }
    cout << step;
}

1002 写出这个数 (20分)

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。

输出格式:

在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Main {
    
    

	public static void main(String[] args) throws IOException {
    
    
		
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		
		String ss = bf.readLine();
				
				
		StringBuffer so = new StringBuffer();
		
		int sum = 0;
		for(int i=0;i<ss.length();i++) {
    
    
			sum += (ss.charAt(i)-48);
		}
		ss = sum+"";
		
		for(int i=0;i<ss.length();i++) {
    
    
			
			switch (ss.charAt(i)-48) {
    
    
			
				case 0:
					so.append("ling ");
					break;
					
				case 1:
					so.append("yi ");
					break;
					
				case 2:
					so.append("er ");
					break;
					
				case 3:
					so.append("san ");
					break;
				
				case 4:
					so.append("si ");
					break;
					
				case 5:
					so.append("wu ");
					break;
					
				case 6:
					so.append("liu ");
					break;
				
				case 7:
					so.append("qi ");
					break;
					
				case 8:
					so.append("ba ");
					break;
					
				case 9:
					so.append("jiu ");
					break;
	
				default:
					break;
			}
		}
		so.deleteCharAt(so.length()-1);
		bf.close();
		System.out.print(so);
	}
}

python代码

s = input()

num_sum = str(sum(map(int,list(s))))

ss=""

L = {
    
    "1":"yi","2":"er","3":"san","4":"si","5":"wu","6":"liu","7":"qi","8":"ba","9":"jiu"}

for i in num_sum:

    ss+=(L[i]+" ")


print(ss[:-1])

c++代码

# include<iostream>
# include<string>

using namespace std;

int main(){
    
    

    string so,ss,s1;
    int sum = 0,x;

    cin >> s1;



    for(int i=0;i<s1.length();i++) {
    
    
        sum += (s1[i]-48);
    }

    while(sum>0){
    
    

        x = sum%10;
        sum = sum/10;

        ss = char(x+48)+ss;
    }

//    cout << ss;

    for(int i=0;i<ss.size();i++) {
    
    

        switch (ss[i]-48) {
    
    
            case 0:
                so.append("ling ");
                break;
            case 1:
                so.append("yi ");
                break;
            case 2:
                so.append("er ");
                break;
            case 3:
                so.append("san ");
                break;

            case 4:
                so.append("si ");
                break;

            case 5:
                so.append("wu ");
                break;

            case 6:
                so.append("liu ");
                break;

            case 7:
                so.append("qi ");
                break;

            case 8:
                so.append("ba ");
                break;

            case 9:
                so.append("jiu ");
                break;

            default:
                break;
        }
    }
    so.erase(so.end()-1);
    cout << so;
}

猜你喜欢

转载自blog.csdn.net/qq_46456049/article/details/109511101