weixin_70701961 2022-05-24 12:16 采纳率: 62.5%
浏览 67

c语言运行该程序无论输入什么,输出结果都是一样的。

假设某火车站采用后进先出的模式。现有n列火车,调度人员给出火车进站的序列,并给出火车出站的序列,判断在这个调度要求能否实现,如果能实现写出火车进站、出站的操作序列。(栈) 输入:第一行为一个正整数N代表火车数量;第二行为N个字母,中间用空格分开,代表N个火车的进站顺序;第三行为N个字母,中间用空格分开,代表N个火车的离站顺序。输出:第一行输出0或1,0代表该调度无法实现,1代表可以实现;如果可以实现,请在第二行输出进站出站序列。表示进站时在字母后加上‘面’,出站加上‘out’。
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
//判断调度能否实现
int Judge(char a[], char b[], char c[], int n)
{
int i,j,k;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (b[j] == a[i])
{
c[j] = i;
}
}
}
for (i = 0; i < n; i++)
{
int l=i;
for (j = ++l; j < n; j++)
{
if (c[i] > c[j])
{
int m=j;
for (k = ++m; k < n; k++)
{
if (c[j] < c[k])
{
break;
return 0;
}
}
}
}
}
return 1;
}

//定义栈
typedef struct{
char* base;
char* top;
int stacksize;
} SqStack;

//栈初始化
void Initstack(SqStack* S)
{
S->base = (char*)malloc(sizeof(char));
S->top = S->base;
S->stacksize = maxsize;
}

//入栈
void Push(SqStack* S, char a)
{
*S->top++ = a;
}

//出栈
SqStack Pop(SqStack* S)
{
if (S->top != S->base){
S->top--;
}
}

//获得栈顶元素
char GetTop(SqStack *S,char *e){
e=(S->top-1);
return *e;
}

//输出顺序
char Print(char a[], char b[], int n)
{
SqStack* S;
Initstack(S);
char *e;
//数组a->{'A','B'}
//数组b->{'B','A'}
int i,j = 0;
for (i = 0; i < n; i++)
{
Push(S, a[i]);
printf("%c_in", a[i]);
while (b[j] == GetTop(S,e))
{
Pop(S);
printf("%c_out", b[j]);
j++;
}
}
}

//主函数
int main()
{
int n, d;
scanf("%d\n", &n);
char a[n], b[n], c[n];
int i;
for (i = 0; i < n; i++)
{
scanf("%c", &a[i]);
if(a[i]=='\n'){
scanf("%c", &a[i]);//避免读到多余的\n
}
}
for (i = 0; i < n; i++)
{
scanf("%c", &b[i]);
if(b[i]=='\n'){
scanf("%c", &b[i]);//避免读到多余的\n
}
}
d = Judge(a, b, c, n);
printf("%d\n", d);
Print(a, b, n);
return 0;
}
为什么无论输入什么,最后输出都是一样的

img

  • 写回答

2条回答 默认 最新

  • 树下等苹果 2022-05-24 13:13
    关注

    主函数改成如下试试:

    int main()
    {
        int n, d;
        scanf("%d", &n);
        char a[10], b[10], c[10];
        int i;
        getchar();
        for (i = 0; i < n; i++)
        {
            scanf("%c", &a[i],2);
            getchar();
        }
        for (i = 0; i < n; i++)
        {
            scanf("%c", &b[i],2);
            getchar();
        }
        d = Judge(a, b, c, n);
        printf("%d\n", d);
        Print(a, b, n);
        return 0;
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月24日

悬赏问题

  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?