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位插入逗號;其他情況,不作處理;
最後將處理後的字元進行輸出
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])); } } } }
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); //輸出編號 } } }
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); } } }