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;
}

猜你喜欢

转载自blog.csdn.net/qq_40788199/article/details/84539586
今日推荐