1. 程式人生 > >C程式-藍橋-新建Microsoft Word文件

C程式-藍橋-新建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

資料規模和約定

  操作次數(即輸入的行數)不超過1481
  刪除編號的數值不超過2012

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int j=0;//定義一個static型變數,方便記錄 

int New_word(int Word[],int Record[])//新建Word文件函式 
{

    int i;
    for(i=0;;i++)//從0開始查詢,
    {
        if(Word[i]==0)//查到空位置(0),即在當前位置新建文件 
        {
            Word[i]=i+1;//記錄當前建好的文件位置 
            Record[j++]=i+1;//記錄當前正在進行的操作 
            return 1;
        }
    }
    return 0;
}

int Delete_word(int Word[],int Record[],int a)//刪除文件函式 
{
    if(Word[a-1]!=0)//不為0,即該文件存在 ,即進行刪除操作 
    {
        Word[a-1]=0;//記錄當前刪除的文件位置  
        Record[j++]=-1;//記錄當前正在進行的操作 ,-1標記刪除成功 
    }
    else
    {
        Record[j++]=-2;//記錄當前正在進行的操作 ,該文件不存在,-2標記刪除失敗 
    }
    return 0;
}

int main( ) 
{
    int Word[2500]={0};//定義一個數組,記錄文件 數目 
    int Record[2500]={0};//定義一個數組,記錄操作 
    char str[20];//定義一個 字串,接收命令 
    int n,i,a;

    scanf("%d",&n);
    getchar();

    for(i=0;i<n;i++)
    {
        scanf("%s",&str);
        if(!strncmp("New",str,3))//strncmp()字串比較函式,相等返回0,接收到New指令,則呼叫 New_word()函式 
            New_word(Word,Record);
        if(!strncmp("Delete",str,6))//接收到Delete指令,再接收一個整形變數,表示要刪除的文件編號,則呼叫 Delete_word()函式
        {
            scanf("%d",&a);
//            getchar();
//            printf("%s",str);
            Delete_word(Word,Record,a);    
        }

//            printf("%d(i)",i);
    } 
    for(i=0;i<j;i++)//輸出操作順序 
    {
        if(Record[i]==-1)
            printf("Successful\n");
        else if(Record[i]==-2)
            printf("Failed\n");
        else
            printf("%d\n",Record[i]);
    }

    return 0;
}