鱼C论坛

 找回密码
 立即注册
查看: 1108|回复: 1

为什么会不对呢

[复制链接]
发表于 2023-11-8 19:38:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,b[N];
int main()
{
    cin>>n;
    while(cin>>n,n)
    {
        while(1)
        {
            int i=1,j=1;
            cin>>b[1];     //给定1到n判断是否与其相等
            if(!b[1])
            {
                break;
            }
            for(int i=2;i<n;i++)cin>>b[i];
            stack<int> s;
            while(i<=n)
            {
                if(i==b[j])
                {
                    i++;
                    j++;  //此时顶部的元素为5
                }
                else
                {
                    s.push(i++);   //将其不相等的数全部丢入栈里面
                    
                }
                while(!s.empty()&&s.top()==b[j])
                {
                    j++;
                    s.pop();

                }
                
            }
            if(j<=n)cout<<"No";
            else cout<<"Yes";
            


        }
         cout<<endl;
    }
    
}
铁轨那道题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-8 19:39:18 | 显示全部楼层
这段代码实现了一个铁轨问题的判断。根据输入的数列,判断是否能够通过一系列的入栈和出栈操作,使得最终栈为空。

然而,这段代码存在一些问题。首先,在读取数列时,只读取了n-2个数,而应该读取n个数。其次,在判断是否能够通过一系列操作使得栈为空时,使用了错误的判断条件。

以下是修改后的代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,b[N];
int main()
{
    cin>>n;
    while(cin>>n,n)
    {
        while(1)
        {
            int i=1,j=1;
            for(int k=1;k<=n;k++) // 读取n个数
                cin>>b[k];
            stack<int> s;
            while(i<=n)
            {
                if(i==b[j])
                {
                    i++;
                    j++;
                }
                else
                {
                    s.push(i++);
                }
                while(!s.empty()&&s.top()==b[j])
                {
                    j++;
                    s.pop();
                }
            }
            if(j<=n)
                cout<<"No";
            else
                cout<<"Yes";
            cout<<endl;
            break;
        }
    }
}

这样修改后的代码能够正确读取n个数,并且在判断是否能够通过一系列操作使得栈为空时,使用了正确的判断条件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 03:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表