问题描述
  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
 
时间限制:1.0s   内存限制:256.0MB
 
 
 #include<stdio.h>
#include<stdlib.h> //atoi()函数头文件
#include<string.h>
int Exist(int a[],int n,int w)//数组中是否存在某元素
{
int i;
for(i=;i<n;i++)
{
if(a[i]==w)
return i;//若存在,返回下标值
} return ;//不存在,返回0
} int Max(int a[],int n)//求数组的最大值
{
int i;
int max=a[];
for(i=;i<n;i++)
{
if(a[i]>max)
max=a[i];
}
return max;//返回最大值
} int New(int a[],int n)//新建
{
int i;
if(Max(a,n)==)//若最大值为0,则表示无文件
{
a[n]=;//数组末添加元素
return ;//添加成功
}
else//最大值不为0,表示有文件
{
for(i=;i<=Max(a,n);i++)//判断区间[1,max]是否连续?
{
if(Exist(a,n,i)==)//如果有断层
{
a[n]=i; //将缺少的文件编号 添加到数组末
return i; //返回编号
}
}
a[n]=Max(a,n)+; //若区间连续无断层,编号加一,添加元素
return Max(a,n)+; //返回编号
}
} int Delete(int a[],int n,int w)//删除
{
int i;
if(Max(a,n)==)
return ; //若无文件,删除失败
else
{
if(Exist(a,n,w)!=)//有文件,且存在编号
{
a[Exist(a,n,w)]=;//将该编号文件删除
return ; //删除成功
}
return ;//有文件,但不存在欲删除的文件编号,删除失败
}
} int main()
{
int n,d,m,i,k=;//n行数
int a[]={};//a文件编号数组,初始化为0
char b[],c[];//b用于存放输入指令字符,c存放Delete n 指令的n scanf("%d",&n);//输入行数
m=n;//新建操作含n++,防止影响循环判断
while(k++ <= m && gets(b)!=NULL)//先判断再输入 当前行++ <= 总行数 输入不为空
{
if(strcmp(b,"New")==)//strcmp(str1,str2),判断字符串是否相等,相等返回0
{
n++;//数组长度加一
printf("%d\n",New(a,n));//输出新建结果
} else if(strncmp(b,"Delete",)==)//strncpy(str1,str2,n) 把str2从n位开始复制到str1
{
strncpy(c,b+,strlen(b));//截取文件编号
int d=atoi(c);//atoi(str) 把字符串转换为整型
if(Delete(a,n,d)==)
printf("Successful\n");
else
printf("Failed\n");
}
}
return ;
}

若想进一步优化,可以使用动态数组,也可以借鉴Java里set集合的思想。

内存数组不可能无限制增大,可以考虑限制值为0的数组元素个数。

新建Microsoft Word文档的更多相关文章

  1. 算法提高 新建Microsoft Word文档

      算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出 ...

  2. C语言 · 新建Microsoft Word文档

    算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题 ...

  3. 算法笔记_104:蓝桥杯练习 算法提高 新建Microsoft Word文档(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题目叫<新建Microsoft Word文档>吗? ...

  4. Java实现 蓝桥杯 算法提高 新建Microsoft world文档

    算法提高 新建Microsoft Word文档 时间限制:1.0s 内存限制:256.0MB 问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:"你出的题目叫&l ...

  5. ASP.NET里创建Microsoft Word文档

    原文发布时间为:2008-08-03 -- 来源于本人的百度文章 [由搬家工具导入] 本文是应在ASP.NET里创建Microsoft Word文档之需而写的。这篇文章演示了在ASP.NET里怎么创建 ...

  6. 在 Microsoft Word 文档 中粘贴代码实现语法高亮的方法

    1.下载notepad++. 2.将代码粘贴进notepad++,或者直接用notepad++打开. 3.点击顶栏 ===> 插件 ===> NppExport ===> cope ...

  7. 新建 Microsoft Office Word 文档 来源:牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28886/1015 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...

  8. C# 给word文档添加水印

    和PDF一样,在word中,水印也分为图片水印和文本水印,给文档添加图片水印可以使文档变得更为美观,更具有吸引力.文本水印则可以保护文档,提醒别人该文档是受版权保护的,不能随意抄袭.前面我分享了如何给 ...

  9. c#中操作word文档-四、对象模型

    转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型  (.Net Perspective) 本文主要针对在Visual St ...

随机推荐

  1. 《Head first设计模式》之工厂模式

    工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到了子类. 预定披萨 假设你有一个披萨店,预定披萨的代码可能是这么写的: Pizza orderPizz ...

  2. Python3(七) 正则表达式与JSON

    一. 初识正则表达式 1.定义:是一个特殊的字符序列,可以帮助检测一个字符串是否与我们所设定的字符序列相匹配. 2.作用:可以实现快速检索文本.实现替换文本的操作. 3.场景: 1.检测一串数字是否是 ...

  3. Python3 (五)函数应用

    一.认识函数 在命令行中查看内置函数的方法: 1.先在命令行里输入python 2.help(函数) 二.函数的定义及运行特点 1.函数基本定义: def funcname(parameter_lis ...

  4. golang 自定义接口 和 实现接口

    /* 定义: type 接口名 interface{ 方法名(可选:参数列表) 可选:返回值列表 || (可选:返回值列表) } 例:type Writer interface { Write(p [ ...

  5. pytorch之 RNN classifier

    import torch from torch import nn import torchvision.datasets as dsets import torchvision.transforms ...

  6. vue-cli项目传到服务器后打不开的问题

    1.vue-cli项目执行dev可以打开网站,直接点击文件或发布后却打不开的问题   webpack.prod.conf.js: output: { ....... publicPath:'./'  ...

  7. C# protobuf自动更新cs文件

    网上的教程大都是手动通过protoc编译, 比较难用 给当前工程添加"Google.Protobuf"和"Grpc.Tools"的引用(通过nuget), 然后 ...

  8. MySQL必知必会--汇 总 数 据

    聚集函数 我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提 供了专门的函数.使用这些函数,MySQL查询可用于检索数据,以便分 析和报表生成.这种类型的检索例子有以下几种. 确定表中行数 ...

  9. 剑指offer-面试题65-不用加减乘除做加法-位运算

    /* 题目: 在不使用加减乘除的前提下,计算两个整数之和. 思路: 不能使用加减乘除则只能考虑位运算. x=num1^num2,则为抹掉进位的结果. y=num1&num2,为只有进位的结果. ...

  10. 在视觉可视化中如何使用ScaleBreaks-比例中断

    从lightningChart V8开始,这项图表控件产品开始支持X轴的Scale break功能. 这个功能的主要作用是排除选定的X轴范围,例如互动交易时间/日期或者机器停产时间等.如果有一部分的数 ...