数据结构之车厢调度 思路很重要

2023-05-16

问题描述]假设停在铁路调度站入口处的车厢序列的编号依次为1,2,3……N。设计一个程序,求出所有由此输出的长度为N的车厢序列。

 要求3节车厢调度的方法,1代表进栈,0代表出栈。

有几点要注意的是,

第一、第一位一定要是1,因为不能一开始就出栈。

第二、最后一位不能为1,也就是不能最后进栈。

第三、0和1的数目要匹配,这里0和1都是3个,

第四、0不能比1多,这里用4来做比方,11000110,这种情况满足上面3个条件但是这样就是错误的

 

同学提供代码

#include<stdio.h>
#include<stdlib.h>
#define STACK_INI_SIZE 1000
#define STACKINEMENT 10
#define NULL 0
typedef struct 
{
	int *base;
	int *top;
	int stacksize;
	int length;
}stack;
main()
{
	void initlist(stack *s);
	void operation(stack *s);
	stack s;
	initlist(&s);
	operation(&s);
}
void initlist(stack *s)
{
	s->base=s->top=(int *)malloc(STACK_INI_SIZE*sizeof(int));
	if(!s->base)
	{
		printf("开辟失败");
		exit(1);
	}
	s->length=0;
	s->stacksize=STACK_INI_SIZE;
}
void push(stack *s,int i)
{
	if(s->length==s->stacksize)
	{
		s->base=(int *)realloc(s->base,(STACK_INI_SIZE+STACKINEMENT)*sizeof(int));
		s->length=STACK_INI_SIZE;
		s->stacksize+=STACKINEMENT;
	}
	*(s->top)=i;
	s->length++;
	s->top++;
}
void pop(stack *s)
{
	if(s->top==s->base)
	{
		printf("栈空无法删除错误");
		exit(1);
	}
	s->top--;
	printf("%d ",*(s->top));
	*(s->top)=NULL;
	s->length--;
}
void operation(stack *s)
{
	int a[1000],i,j,k,m,n,l,z,y,flag1=1,flag2=1;
	char ch;
	printf("请输入车厢数\n");
	scanf("%d",&i);
	flag1=1;
	for(j=0;j<i*2;j++)/*对数组初始化为10101010,即首组输出的数据为1234*/
	{
		a[j++]=1;
		a[j]=0;
	}
	while(flag1)/*总循环,输出所有满足条件的车厢调度*/
	{
		l=1,k=0;
		for(j=0;j<i*2;j++)/*输出车厢调度*/
		{
			if(a[j]==1)
				push(s,l++);
			else if(a[j]==0)
				pop(s);
		}
		printf("\n");
		for(j=0;j<i;j++)/*判断是否已经满足结束条件,结束条件为11110000*/
			if(a[j]==1)
				k++;
			if(k==i)
				flag1=0;
			a[i*2-1]++;/*尾数自加1*/
			while(flag2&&flag1)
			{
				
				z=1,m=0,n=0,y=1;
				for(j=i*2-1;j>=0&&z;j--)/*假如自加之后是2的话,前一位自加1,本位为0*/
					if(a[j]!=2)
						z=0;
					else
					{   
						a[j]=0;
						a[j-1]++;
					}
					for(j=0;j<i*2&&y;j++)/*检验新的组合是否满足需求*/
					{
						if(a[j]==1)
							m++;
						else if(a[j]==0)
							n++;      
						else
							printf("错误\n");
						if(n>m)
							y=0;/*判断输出的时候栈是否为空,比如11000110*/
						
					}
					if(m==i&&n==i&&a[0]==1&&a[i*2-1]==0&&y==1)
						flag2=0;
					else
						a[i*2-1]++;
					
			}
			flag2=1;
	}
}



 


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构之车厢调度 思路很重要 的相关文章

随机推荐

  • 车辆视频检测器检测参数配置

    车辆视频检测器检测参数的最佳配置 span class token class name span class token keyword double span span whiteCarYuZhi span class token op
  • VUE v-for中获取二维对象数组

    对象数组如下 xff1a 34 index 34 34 2 34 34 text 34 34 办公平台 34 34 submenu 34 34 index 34 34 2 1 34 34 text 34 34 企业内部消息 34 34 in
  • c++基础知识第十天:结构体嵌套结构体,结构体作函数参数

    一 结构体嵌套结构体 结构体内的成员可以是另一个结构体 xff08 访问时用 访问到不能访问为止 xff09 1 例如 xff1a 每个老师指导一个学员 xff0c 一个老师的结构体中嵌套一个学生的结构体 include lt iostre
  • ros出现 datatype/md5sum错误

    1 错误图 2 我是在windows用的vs code ssh 另外一台电脑ubuntu18 04系统 xff0c 然后在那边terminal输入rqt plot但是图里面一直空白 xff0c windows这边输出上图报错 一直以为是自己
  • 安卓Android多阶段进度条progress bar附带动画效果

    还在为美工设计出的进度条而发愁吗 xff1f 大家先看效果吧 欢迎加安卓开发交流群 xff1a 308372687 xff08 博主尽可能帮助大家 xff09 转载请注明来源 代码连接 GitHub xff1a https github c
  • 【docker】Docker安装

    版本说明 OS xff1a Centos7 6 x64 Linux内核 3 10 0 1062 12 1 el7 x86 64 Docker Docker version 19 03 14 Docker要求CentOS系统的内核版本高于3
  • Python如何在函数内部使用全局变量

    使用方法 Python在函数内部使用全局变量的一种常用方法如下 xff1a 即首先需在函数外部给一个变量赋初值 xff0c 然后在函数内部用关键字 global 将此变量声明为全局变量 而且 xff0c 不能有形如 global a 61
  • 树莓派3B SWAP空间不足

    在对树莓派3B进行ROS indigo安装时 xff0c 到编译ROS程序这一步时 xff0c 总是失败 xff0c 查看了原因发现 xff0c 在为树莓派安装系统时swap空间没有设置 不过为时未晚 xff0c 现在也可以对swap空间进
  • TX2核心板安装OpenCV3.2(在cuda9.0的环境下)

    今天新到的TX2 xff0c 还有点烫手 xff0c 买来要用在无人机上做视觉的目标识别 xff0c 所以自然要装上OpenCV喽 xff01 TX2核心板买来就自带了cuda9 0 xff0c 据说这个和opencv3不太搭 xff0c
  • c语言面试题 指针30个常错题型

    1 char const p char const p const char p 上述三个有什么区别 xff1f char const p 常量指针 xff0c p的值不可以修改 char const p xff1b 指向常量的指针 xff
  • c++ 笔试面试题 难题精选 持续更新

    第一题 问下面的输出结果是 什么 xff1f include lt stdio h gt include lt iostream gt using namespace std class A protected int m data pub
  • VS2010 添加OnInitDialog的方法

    OnInitDialog 在vs2010中实现为虚函数 所以在 项目 gt 类向导 gt 虚函数 gt 选中要添加的类 xff0c 找到对应虚函数添加即可 就这么简单
  • HBITMAP与BITMAP 的区别 BMP图像的格式

    HBITMAP 是句柄 xff1b BITMAP 是实例 xff1a typedef struct tagBITMAP bm int bmType 必须是BM int bmWidth 指定位图的宽度 xff08 以象素为单位 xff09 i
  • fatal error LNK1281: 无法生成 SAFESEH 映像。

    解决方法 xff1a 1 打开该项目的 属性页 对话框 2 单击 链接器 文件夹 3 单击 命令行 属性页 4 将 SAFESEH NO 键入 附加选项 框中 xff0c 然后点击应用
  • 如何实现科技论文里面的算法

    这是一篇关于如何实现科研论文中算法的简要指南 作者曾实现过很多书本上和科研论文中的复杂算法 xff0c 在这篇文章中作者总结他在研究 xff0c 阅读 xff0c 编码和调试时积累的大量经验 很显然 xff0c 这篇文章主要集中在和计算机科
  • 程序员专用经典语录—看完笑一阵可以,千万不要死循环哦!

    IT人表示屁股上还得纹一个 lt body gt 要不中间来个hello world 真正的程序员喜欢兼卖爆米花 xff0c 他们利用CPU散发出的热量做爆米花 xff0c 可以根据米花 爆裂的速度听出正在运行什么程序 十年生死两茫茫 xf
  • android 自学中的散乱笔记

    1 查看程序运行记录 要在LogCat中查看 其内可选择查看的信息级别 xff0c 比如info xff0c error xff0c debug等等 xff0c 信息可筛选显示 2 xff1a 安装好手机驱动 xff0c 将手机接入usb即
  • java lambda表达式 闭包学习笔记

    我们把这些只拥有一个方法的接口称为函数式接口 声明一个接口是函数式接口 xff1a 编译器会根据接口的结构自行判断 xff08 判断过程并非简单的对接口方法计数 xff1a 一个接口可能冗余的定义了一个Object已经提供的方法 xff0c
  • C++ STL set和multiset的使用 hunst_xiehonghao 总结

    C 43 43 STL set和multiset的使用 std set lt int gt s 那个s这个对象里面存贮的元素是从小到大 排序的 xff0c 因为用std less作为比较工具 1 xff0c set的含义是集合 xff0c
  • 数据结构之车厢调度 思路很重要

    问题描述 假设停在铁路调度站入口处的车厢序列的编号依次为1 xff0c 2 xff0c 3 N 设计一个程序 xff0c 求出所有由此输出的长度为N的车厢序列 要求3节车厢调度的方法 xff0c 1代表进栈 xff0c 0代表出栈 有几点要