1. 程式人生 > >PAT (Basic Level) Practise (中文)練習(Java語言組)

PAT (Basic Level) Practise (中文)練習(Java語言組)

1001. 害死人不償命的(3n+1)猜想 (15/15)

卡拉茲(Callatz)猜想:

對任何一個自然數n,如果它是偶數,那麼把它砍掉一半;如果它是奇數,那麼把(3n+1)砍掉一半。這樣一直反覆砍下去,最後一定在某一步得到n=1。卡拉茲在1950年的世界數學家大會上公佈了這個猜想,傳說當時耶魯大學師生齊動員,拼命想證明這個貌似很傻很天真的命題,結果鬧得學生們無心學業,一心只證(3n+1),以至於有人說這是一個陰謀,卡拉茲是在蓄意延緩美國數學界教學與科研的進展……

我們今天的題目不是證明卡拉茲猜想,而是對給定的任一不超過1000的正整數n,簡單地數一下,需要多少步(砍幾下)才能得到n=1?

輸入格式:每個

測試輸入包含1個測試用例,即給出自然數n的值。

輸出格式:輸出從n計算到1需要的步數。

輸入樣例:
3
輸出樣例:
5
    import java.util.Scanner;  
      
    public class Main {  
        public static void main(String[] args) {  
            Scanner sc = new Scanner(System.in);  
            while(sc.hasNext()){  
                int n=sc.nextInt();  
                int i=0;  
                while(n!=1){  
                    if(n%2==0){  
                        n=n/2;  
                    }else{  
                        n=(3*n+1)/2;  
                    }  
                    i++;  
                }  
                System.out.println(i);  
            }  
        }  
    }  

注意:迴圈條件

1002. 寫出這個數 (20/20)

讀入一個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。

輸入格式:每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小於10100

輸出格式:在一行內輸出n的各位數字之和的每一位,拼音數字間有1空格,但一行中最後一個拼音數字後沒有空格。

輸入樣例:
1234567890987654321123456789
輸出樣例:
yi san wu
import java.util.Scanner;  
  
public class Main{  
  public static void main(String[] args) {  
    Scanner sc = new Scanner(System.in);  
    String string=sc.nextLine();  
  
    int s=0;  
    for(int i=0;i

注:這個程式剛開始有點問題,部分正確,想了一下,是因為不知道和的位數,不能只算三位的,將算出來的結果又轉換成字串,在取每一位。

1003. 我要通過(20)

答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。

得到“答案正確”的條件是:

1. 字串中必須僅有P, A, T這三種字元,不可以包含其它字元;
2. 任意形如 xPATx 的字串都可以獲得“答案正確”,其中 x 或者是空字串,或者是僅由字母 A 組成的字串;
3. 如果 aPbTc 是正確的,那麼 aPbATca 也是正確的,其中 a, b, c 均或者是空字串,或者是僅由字母 A 組成的字串。

現在就請你為PAT寫一個自動裁判程式,判定哪些字串是可以獲得“答案正確”的。

輸入格式:每個測試輸入包含1個測試用例。第1行給出一個自然數n (<10),是需要檢測的字串個數。接下來每個字串佔一行,字串長度不超過100,且不包含空格。

輸出格式:每個字串的檢測結果佔一行,如果該字串可以獲得“答案正確”,則輸出YES,否則輸出NO。

輸入樣例:
8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
輸出樣例:
YES
YES
YES
YES
NO
NO
NO
NO
import java.util.Scanner;  
 
public class Main {  
    public static void main(String[] args){  
        Scanner sc = new Scanner(System.in);  
        int num = sc.nextInt();  
        for(int i=0; i=1 && nump==1 && numt==1){  
                if(str.indexOf('P')*(str.indexOf('T')-str.indexOf('P')-1)
                		== str.length() - str.indexOf('T')-1)  //?????????
                    flag = true;  
                else  
                    flag = false;  
            }  
            if(flag)  
                System.out.println("YES");  
            else  
                System.out.println("NO");  
        }  
    }  
}  

這個題之前做的時候一直在想如何一次性的將n個字串輸入進去,可後來發現原來不用一次性全把n個串輸進去,一次一個,邊輸入邊判斷也是可以的。浪費了我的感情。。。

1004. 成績排名 (20)

讀入n名學生的姓名、學號、成績,分別輸出成績最高和成績最低學生的姓名和學號。

輸入格式:每個測試輸入包含1個測試用例,格式為

  第1行:正整數n
  第2行:第1個學生的姓名 學號 成績
  第3行:第2個學生的姓名 學號 成績
  ... ... ...
  第n+1行:第n個學生的姓名 學號 成績
其中姓名和學號均為不超過10個字元的字串,成績為0到100之間的一個整數,這裡保證在一組測試用例中沒有兩個學生的成績是相同的。

輸出格式:對每個測試用例輸出2行,第1行是成績最高學生的姓名和學號,第2行是成績最低學生的姓名和學號,字串間有1空格。

輸入樣例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
輸出樣例:
Mike CS991301
Joe Math990112

程式碼如下:

import java.util.Scanner;  
 
public class Main {  
  public static void main(String[] args) {  
    Scanner sc= new Scanner(System.in);  
    while(sc.hasNext()){  
      int n=sc.nextInt();  
      sc.nextLine();  
        
      int max=-1,min=101;  
      String maxs="",mins="";  
        
      for(int i=0;i<n;i++){  
        String s=sc.nextLine();  
        String subs=s.substring(s.indexOf(" ")+1);  
        int index=subs.indexOf(" ");  
        int gra=Integer.parseInt(subs.substring(index+1));  
        String nam=s.substring(0,index+s.indexOf(" ")+1);  
        if(gra>max){  
          max=gra;  
          maxs=nam;  
        }  
        if(gra<min){  
          min=gra;  
          mins=nam;  
        }  
      }  
      System.out.println(maxs);  
      System.out.println(mins);  
    }  
  }  


1013. 數素數 (19/20)

令Pi表示第i個素數。現任給兩個正整數M <= N <= 104,請輸出PM到PN的所有素數。

輸入格式:

輸入在一行中給出M和N,其間以空格分隔。

輸出格式:

輸出從PM到PN的所有素數,每10個數字佔1行,其間以空格分隔,但行末不得有多餘空格。
輸入樣例:

5 27

輸出樣例:

11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89

97 101 103

import java.util.Scanner;  
  
public class Main {  
  public static void main(String[] args) {  
    Scanner sc= new Scanner(System.in);  
    while(sc.hasNext()){  
      int m=sc.nextInt();  
      int n=sc.nextInt();  
        
      int[] su=new int[4000];  
      su[0]=2;  
      int index=1;  
        
      for(int i=3;i<10000;i+=2){  
        if(Su(i))  
          su[index++]=i;      
          
      }  
        
      int num=n-m+1;  
      int hang=num/10;  
      int yu=num%10;  
      m=m-1;  
        
      for(int i=0;i
這個題第一次做是在比賽的時候做的,寫了好多次,都是執行超時,讓人很鬱悶。現在在寫寫。