蓝桥杯 算法提高 新建Microsoft Word文档(c语言版详细注释)

试题 算法提高 新建Microsoft Word文档

                                                                                  蓝桥杯试题解答汇总链接

资源限制

       时间限制:1.0s 内存限制:256.0MB


问题描述

       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<string.h>
#include<stdlib.h>//需要用到malloc和free函数 
int check(int num[],int count){//检查之前是否有被删除的文件
	int i,t=-1;
	for(i=0;i<count;i++){
		if(num[i]==0){
			t=i;
			return t;
		}
	}
	return t;
}
int main(){
	int n;
	scanf("%d",&n);
	char *s,a[2][7]={"New","Delete"};//指针s用来保存每次的输入数组a用来录入是新建文件还是删除文件 
	int num[n],i=0,count=0;//count用来标记操作次数以给检查函数检查此前数组num中
	//是否有被删除的文件i作为数组num的下标,数组num作为输出新建文件
	s=(char*)malloc(sizeof(char)*7);//给指针分配内存 
	while(n--){//一直循环到n=0时结束
		scanf("%s",s);
		if(strcmp(s,a[0])==0){//新建文件
			int b=check(num,count);//b用来记录检查函数的返回值
			if(b==-1){//b为-1则此前没有被删除的文件
				num[i]=i+1;//num记录已经新建的文件名
				count++;
				printf("%d\n",num[i]);
				i++;
			}
			else{//否则之前又被删除的
				num[b]=b+1;//从最下的补充num空缺的文件名
				printf("%d\n",num[b]);
			}
		}
		if(strcmp(s,a[1])==0){//删除文件
			int x;
			scanf("%d",&x);
			if(x>count){//如果x>count代表此文件不存在
				printf("Failed\n");
			}
			else{
				num[x-1]=0;//否则把删除掉的文件的num处的名字标记为0
				printf("Successful\n");
			}
		}
	}
	free(s);//释放内存 
	return 0;
}
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是关于C语言蓝桥杯算法的讲解: 1. 蓝桥杯算法题目类型 蓝桥杯算法题目主要分为以下几类:数学题、递推题、搜索题、贪心题、动态规划题、图论题等。 2. 数学题 数学题是蓝桥杯中出现频率最高的一类题目,主要考察对数学知识的掌握和应用能力。常见的数学题目有:最大公约数、最小公倍数、质数判断、进制转换、排列组合等。 3. 递推题 递推题是指通过已知的一些条件,推导出后续的结果。递推题目通常需要使用循环结构来实现。常见的递推题目有:斐波那契数列、汉诺塔、青蛙跳等。 4. 搜索题 搜索题是指在一个状态空间中寻找目标状态的过程。搜索题目通常需要使用递归或循环结构来实现。常见的搜索题目有:深度优先搜索、广度优先搜索、回溯法等。 5. 贪心题 贪心算法是指在每一步选择中都采取当前状态下最优的选择,从而希望导致结果是全局最优的算法。贪心题目通常需要使用排序等方法来实现。常见的贪心题目有:背包问题、活动安排等。 . 动态规划题 动态规划是一种将复杂问题分解成小问题来解决的优化技术。动态规划题目通常需要使用递推或循环结构来实现。常见的动态规划题目有:最长上升子序列、最大子段和等。 7. 图论题 图论是研究图的性质和图之间关系的数学分支。图论题目通常需要使用图的遍历、最短路径等算法来实现。常见的图论题目有:最短路径、最小生成树等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Derrick-Xu

谢大哥打赏,我会继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值