问题描述
  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. LAMP: 分布式 HTTP 2.4.25 + PHP 5.4.13 + MySQL 5.5.28 分离部署

    目录 A. 环境说明:B. 效果截图:C. HTTP编译安装D. MySQL二进制安装E. PHP源码编译安装F. PHP连接HTTPG. PHP支持扩展功能xcacheH. PHP连接MySQLI. ...

  2. c++中的智能指针怎样释放连续的资源?

    以前学智能指针时有点想当然了,一直以为智能指针很智能,不管你让它管理的是单个资源还是连续的资源它都能正确的将资源释放,现在发现自己大错特错. 先看代码: #include <iostream&g ...

  3. who 命令

    1)显示系统启动时间 [root@node1 ~]# who -b 系统引导 2020-01-10 11:41 2)显示系统当前的运行级别 [root@node1 ~]# who -r 运行级别 3 ...

  4. [教程分享]锐族MP3刷固件教程

    转载自我的博客:https://blog.ljyngup.com/archives/163.html/ (废话较多见谅) 在到学校前发现几个月前锐族mp3的固件更新了,赶紧刷了一个,发现网上关于这个售 ...

  5. 分组密码CBC加密缺陷

    title: 分组密码CBC加密缺陷 date: 2017-05-15 10:04:47 tags: ["密码学"] --- 关于密码学的种种漏洞以及利用网上也有不少,但是比较零散 ...

  6. 2014.1.21 DNS大事故(dns原理、网络封锁原理)

    1.21那天发生了什么,由1.21联想补充……  很多网站都上不去,域名解析都到了65.49.2.178这个IP地址 先科普,再深挖  dns查询类型 递归查询,迭代查询   DNS解析过程,这里使用 ...

  7. Deepin下将Caps映射为Control_L键

    xmodmap -e 'clear Lock' -e 'keycode 0x42 = Control_L'

  8. Sunset: dusk: Vulnhub Walkthrough

    靶机链接: https://www.vulnhub.com/entry/sunset-dusk,404/ 主机IP扫描: IP端口扫描: 21 端口  pyftpdlib 1.5.5 版本漏洞 25 ...

  9. Android Intent用法总结

    Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 ...

  10. Linux Samba文件共享服务,安装与案例配置

    Samba服务器安装和配置 1:安装Samba服务器软件包 [root@localhost ~]# rpm -qa | grep samba [root@localhost ~]# yum -y in ...