PAT-A Java實現

一樂one發表於2018-08-03
1001 A+B Format (20)

輸入:兩個數a,b,-1000000 <= a, b <= 1000000

輸出:a+b,並以每3個用逗號隔開的形式展示。

思路一:

1)計算出a+b的值,賦給sum。判斷sum<0,則先輸出一個“”-”號,並將sum=-sum(轉換為正值);判斷sum==0時,則輸出0;

2)然後將sum存到一個陣列num[10]中,將sum數值的低位存到陣列的低位(個位存在陣列第1位),用一個while迴圈:num[i]=sum%10,sum=sum/10;i++;

3)將陣列num[]從高位到低位進行輸出,每逢3位輸出逗號,即i%3==0.(注意,輸出最後一位後不加逗號)

 1     int a,b;
 2     int sum,i=0;//存放a+b的值 
 3     int num[10];
 4     scanf("%d %d",&a,&b);
 5     
 6     sum=a+b;
 7     if(sum<0){
 8         printf("-");
 9         sum=-sum;}
10     else if(sum==0){
11         printf("0");}
12     while(sum>0){
13         num[i]=sum%10;
14         sum=sum/10;
15         i++;}
16     int j=0;
17     for(j=i-1;j>=0;j--){
18         printf("%d",num[j]);
19         if(j%3==0&&j!=0){
20             printf(",");}}  

 

 思路二:

1)計算出a+b的值,賦給sum。判斷sum<0,則先輸出一個“”-”號,並將sum=-sum(轉換為正值);

2)判斷sum>=1000000,輸出printf(“%d,%03d,%03d”,sum/1000000,sum%1000000/1000,sum%1000);

sum>=1000,輸出printf(“%d,%03d”,sum/1000,sum%1000);

其他情況,輸出sum

 1    int a,b;
 2     int sum;//存放a+b的值 
 3     scanf("%d %d",&a,&b);
 4     sum=a+b;
 5     if(sum<0){
 6         printf("-");
 7         sum=-sum;}
 8     if(sum>=1000000){
 9         printf("%d,%03d,%03d",sum/1000000,sum%1000000/1000,sum%1000);
10     }
11     else if(sum>=1000) {
12         printf("%d,%03d",sum/1000,sum%1000); 
13     }
14     else{
15         printf("%d",sum); 
16     } 

 

思路三:

1)計算出a+b的值,賦給sum。判斷sum<0,則先輸出一個“”-”號,並將sum=-sum(轉換為正值);

2)將sum轉換成字元形式,判斷sum>=1000000,在倒數第7位插入逗號,並在倒數第3位插入逗號;

sum>=1000,在倒數第3位插入逗號;其他情況,不作處理;

最後將處理後的字元進行輸出

 

1005 Spell It Right (20 分)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String num[] = {"zero","one","two","three","four","five","six","seven","eight","nine"};
        String N = input.next();
        char[] n = N.toCharArray();
        int sum =0,numLen=0;
        int digit[] = new int[10];
        for(int i=0;i<n.length;i++){
            sum += n[i] - `0`;
        }
        if(sum==0){
            System.out.println(num[0]);
        }else{
            while(sum!=0){
                digit[numLen++] = sum%10; //從低位到高位將每位存於digit中
                sum /= 10;
            }
        }
        for(int i=numLen-1;i>=0;i--){
            System.out.print(num[digit[i]]);
            if(i>0){
                System.out.print(" ");
            }
        }
    }
}

  

1008 Elevator (20 分)

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int N = input.nextInt();
        int time = 0;
        int before = 0;
        for(int i=0;i<N;i++){
            int now = input.nextInt();
            if(now > before){
                time += (now - before)*6;
            }else {
                time += (before - now)*4;
            }
            time+=5;
            before=now;
        }
        System.out.println(time);
    }
}

  

1009 Product of Polynomials

注意:有多個類,要提交OJ時, 可以將多個類寫入一個檔案。但只有Main類使用public修飾。

import java.text.DecimalFormat;
import java.util.Scanner;
class Poly {
    public int exp;
    public double cof;
}
public class Main {
    //1009 Product of Polynomials
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        Poly[] poly = new Poly[1001];
        double[] ans = new double[2001];
        int n = input.nextInt();
        for(int i=0;i<n;i++){
            poly[i]= new Poly();
            poly[i].exp = input.nextInt();
            poly[i].cof = input.nextDouble();
        }
        int m = input.nextInt();
        for(int i=0;i<m;i++){
            int exp = input.nextInt();
            double cof = input.nextDouble();
            for(int j=0;j<n;j++){
                ans[exp+poly[j].exp] += cof*poly[j].cof;
            }
        }
        int num=0;
        for(int i=0;i<2001;i++){
            if(ans[i]!=0.0){
                num++;
            }
        }
        System.out.print(num);
        DecimalFormat format   =   new   DecimalFormat("0.0");
        for(int i=2000;i>=0;i--){
            if(ans[i]!=0.0){
                System.out.print(" "+i+" "+format.format(ans[i]));
            }
        }
    }

}

  

1011 World Cup Betting (20 分)
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String[] game = {"W","T","L"};
        double profit=1;
        double[] a = new double[3];
        for(int i=0;i<3;i++){
            a[0] = input.nextDouble();
            a[1] = input.nextDouble();
            a[2] = input.nextDouble();
            int j=max(a);
            profit *= a[j];
            System.out.print(game[j]+" ");
        }
        profit = (profit*0.65-1)*2;
        DecimalFormat   df  =   new   DecimalFormat("0.00");
        System.out.print(df.format(profit));
    }
    public static int max(double a[]){
        double max=a[0];
        int maxi=0;
        for(int i=1;i<a.length;i++){
            if(a[i]>max){
                max=a[i];
                maxi=i;
            }
        }
        return maxi;
    }
}

  

 

1042 Shuffling Machine

import java.util.Scanner;
public class Main {
    //Shuffling Machine
    public static void main(String[] args){
        int N=54;
        char[] mp={`S`,`H`,`C`,`D`,`J`};//牌的編號與花色的關係
        int[] start = new int[N+1];
        int[] next = new int[N+1];
        int[] end = new int[N+1];
        for(int i=1;i<=N;i++){
            start[i]=i; //初始化牌的編號
        }
        Scanner input = new Scanner(System.in);
        int K = input.nextInt();    //輸入變換的次數
        for(int i=1;i<=N;i++){
            next[i]=input.nextInt();    //輸入每個位置上的牌在操作後的位置
        }

        for(int step=0;step<K;step++){  //執行K次操作
            for(int i=1;i<=N;i++){
                end[next[i]]=start[i];  //把第i個位置的牌的編號存於位置next[i];
            }
            for(int i=1;i<=N;i++){
                start[i]=end[i];    //把end陣列賦值給start陣列,以供下次操作使用
            }
        }

        for(int i=1;i<=N;i++){
            if(i!=1){
                System.out.print(" ");
            }
            System.out.print(mp[(start[i]-1)/13]);  //輸出花色
            System.out.print((start[i]-1)%13+1);    //輸出編號
        }

    }
}

  

1065 A+B and C (64bit) (20 分)

 

import java.util.Scanner;
public class Main {
    //1065 A+B and C (64bit)
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int T = input.nextInt();
        for(int i=1;i<=T;i++){
            long A = input.nextLong();
            long B = input.nextLong();
            long C = input.nextLong();
            boolean flag;
            long res = A+B;
            if(A>0&&B>0&&res<0) //正溢位
                flag=true;
            else if(A<0&&B<0&&res>=0)   //負溢位
                flag=false;
            else if(res>C)  //無溢位時,A+B>C時為true;
                flag=true;
            else            //無溢位時,A+B<=C時為false;
                flag=false;
            System.out.println("Case #"+i+": "+flag);
        }
    }
}

 

 

  

相關文章