演算法提高 新建Microsoft Word文件 藍橋水題
問題描述
L正在出題,新建了一個word文件,想不好取什麼名字,身旁一人驚問:“你出的題目叫《新建Microsoft Word文件》嗎?”,L大喜,一拍桌子,說:“好,就叫這個名字了。” 仔細觀察,當你新建一個word文件時,會得到一個名為“新建 Microsoft Word 文件.doc”的檔案,再新建一個,則名為“新建 Microsoft Word 文件(2).doc”,再新建,便是“新建 Microsoft Word 文件(3).doc”。不斷新建,編號不斷遞增。倘若你現在新建了三個文件,然後刪除了“新建 Microsoft Word 文件(2).doc”,再新建就又會得到一個“新建 Microsoft Word 文件(2).doc”。 嚴格說,Windows在每次新建文件時,都會選取一個與已有檔案編號不重複的最小正整數作為新文件的編號。 請程式設計模擬以上過程,支援以下兩種操作 New:新建一個word文件,反饋新建的文件的編號 Delete id:刪除一個編號為id的word文件,反饋刪除是否成功 初始時一個檔案都沒有,“新建 Microsoft Word 文件.doc”的編號算作1。
輸入格式
第一行一個正整數n表示操作次數,接下來n行,每行表示一個操作。若該行為”New”,則表示新建,為”Delete id”則表示要刪除編號為id的文件,其中id為一個正整數。操作按輸入順序依次進行。
輸出格式
對於輸入的每一行,輸出其反饋結果。對於新建操作,輸出新建的文件的編號;對於刪除操作,反饋刪除是否成功:如果刪除的檔案存在,則刪除成功,輸出”Successful”,否則輸出”Failed”。
樣例輸入
12 New New New Delete 2 New Delete 4 Delete 3 Delete 1 New New New Delete 4
樣例輸出
1 2 3 Successful 2 Failed Successful Successful 1 3 4 Successful
import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); int a=sc.nextInt(); sc.nextLine(); int[] ar=new int[2014]; while(a-->0) { String[] arr=sc.nextLine().split(" "); if(arr[0].equals("New")) { for(int i=1;i<ar.length;i++) { if(ar[i]==0) { System.out.println(i); ar[i]=1; break; } } } if(arr[0].equals("Delete")) { if(ar[Integer.parseInt(arr[1])]==1) { ar[Integer.parseInt(arr[1])]=0; System.out.println("Successful"); } else{ System.out.println("Failed"); } } } } }
思路總結,這裡我一開始以為用棧來處理後來看了一下題目這個不是考察棧的,後面直接用陣列來對映是否存在這個檔案,檔案的ID 對映到陣列下標的ID 如果存在則為1 不存在則為0, 如果不存在這個檔案進行delete 則失敗, 反之成功. New比較簡單直接遍歷這個陣列,然後判斷是否為0 如果為0那就建立,讓後賦值為1; 這裡的New有點暴力