C程序-蓝桥-新建Microsoft Word文档

本文介绍了一种模拟Word文档创建及删除操作的算法实现,包括处理新建文档时的自动编号与删除已存在文档后的编号更新。通过具体的代码示例,展示了如何在一系列操作中保持文档编号的连续性和唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

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

 

代码优化,操作结果并不需要记录起来,直接输出即可

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

const int N=2015;
int New_word(int *id);//新建函数 
int Delete_word(int *id,int d);//删除函数 

int main( ) 
{
	char cmd[8];
	int ID[N]={0};
	int n,i,d;
	
	scanf("%d",&n);//操作次数 
	for(i=0;i<n;i++)
	{
		scanf("%s",cmd);
		if(!strncmp(cmd,"New",3))//判断是新建word 
			New_word(ID);
		if(!strncmp(cmd,"Delete",6))//判断是删除word 
		{
			scanf("%d",&d); //删除id 
			Delete_word(ID,d);
		}
	}
	return 0;
}

int New_word(int *id)
{
	int i;
	for(i=0;i<N;i++)
	{
		if(!id[i])
		{
			id[i]=1;//新建置1 
			printf("%d\n",i+1);//输出新建id
			return 1;
		}
	}
	return 0;
}

int Delete_word(int *id,int d)
{
	if(id[d-1])//判断id是否存在 
	{
		id[d-1]=0;
		printf("Successful\n");//存在即删除成功 
		return 1;
	}

	printf("Failed\n");//不存在即删除失败
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值