ccf/csp 買菜Java實現
阿新 • • 發佈:2018-12-13
對於Java來說,首先要實現輸入格式的統一,呼叫Scanner進行輸入,然後進行轉換
該問題解決的方法是分成四個陣列,分別儲存甲的開始時刻,乙的開始時刻,甲的結束時刻,乙的結束時刻
然後找出甲乙末時刻的最小值,將時刻由1開始遞增到時刻的最小值,每次遞增1
在時刻遞增的過程中,根據甲的起末時刻來判斷該時刻是否在其內,滿足條件則標誌為1,乙也一樣
如果甲乙的標誌同時為1,則說明符合條件,時間++
最終輸出結果
for(int i=1;i<=min;i++)//以時間軸遞增作為判斷,記錄每一刻 { if(a1[x]>=i&&a2[x]<i) { a++;//如果在時間軸移動的過程中在該時間段內,即符合題意條件,則標誌為1 } else if(a2[x]>=i) { x++;//如果該時間軸已經過了一個時刻段,則++,進入下一個時刻段 } if(b1[y]>=i&&b2[y]<i)//二者的時間段不能相互影響,就是會出現一個包含多個 1,7 2,3 4, 5情況 { b++;//如果b也滿足條件,類似與a } else if(b2[y]>=i) { y++; } if(a==1&&b==1) { time++;//二者同時滿足條件,則時間增加,由於是以1作為單位,所以++ }
import java.util.*; public class ex4_2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s; s = sc.nextLine();//字元資料的輸入,以回車鍵作為輸入結束的判斷 int n = Integer.parseInt(s);//強制型別轉換,將字元型強制轉換為int型 int[][] s1 = new int[2 * n][2];//建立一個二維陣列 for (int i = 0; i < 2*n; i++) { String[] s_1 = sc.nextLine().split(" ");//資料的輸入,每次可以輸入形式為字元 空格 字元的資料,且字元陣列分開,不會出現 2 3= 23 for(int j=0;j<2;j++) { s1[i][j]=Integer.parseInt(s_1[j]);//依次存進每一列行資料 } } int[] a1=new int[n]; int[] a2=new int[n]; int[] b1=new int[n]; int[] b2=new int[n]; int m=0; int k=0; for(int i=0;i<n;i++) { a1[i]=s1[i][0]; } for(int i=n;i<2*n;i++) { b1[m]=s1[i][0]; m++; } for(int i=0;i<n;i++) { a2[i]=s1[i][1]; } for(int i=n;i<2*n;i++) { b2[k]=s1[i][1]; k++; } int min; if(a2[n-1]<=b2[n-1]) { min=a2[n-1]; } else { min=b2[n-1]; } int x=0,y=0; int time=0; for(int i=1;i<=min;i++) { int a=0,b=0; if(a1[x]<=i&&a2[x]>i) { a++; } else if(i>=a2[x]) { x++; } if(b1[y]<=i&&b2[y]>i) { b++; } else if(i>=b2[y]) { y++; } if(a==1&&b==1) { time++; } } System.out.println(time); } }