数据结构的一道题求大神解救

lufo816 2013-10-10 09:53:43
Description
小明很喜欢玩射击游戏。他刚考完了数据结构期末考试,感觉不错,于是又来到了射击娱乐场放松一下。和上次一样,先从老板那租了一把步枪和装有N发子弹的弹夹。这里,再把规则说一遍。在射击的过程中,小明每次都有两种选择:从弹夹中取出一颗子弹上膛,或者打一发子弹出去。注意:所有的子弹都从枪口上膛。小明感觉这有点像《数据结构》课程中的“栈”的特点。因此在打完了这N发子弹之后,他想验证一下这些子弹打出来的顺序是不是真的满足“栈”的特性。假设N颗子弹的编号为1,2,…,N。子弹从弹夹中取出的顺序也是从1到N,这里N = 10。给定一个子弹被打出的顺序,你可以帮小明验证它满不满足“栈”的打出顺序吗?
Input
可能有多个测试输入,第一行给出总共的测试输入的个数。
每个测试输入只有一行:用空格隔开的十个数,表示子弹打出的编号顺序。
Output
对每个测试输入,输出只有一行:
“Yes”,如果打出顺序满足“栈”的特点;
“No”,如果打出顺序不满足“栈”的特点。
Sample Input
3
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
3 1 2 4 5 6 7 8 9 10
Sample Output
Yes
Yes
No

这是我的代码,为什么WA啊?求救啊

#include <iostream>
#include <stack>
using namespace std;

int main() {
int a[10], n = 0, i = 0, j = 0;
bool k = true;
stack<int> s[10];
cin >> n;
while (n--) {
for (i = 0; i < 10; i++) {
cin >> a[i];
}
for (i = 0; i < 10; i++) {
if (i > 0) {
if (a[i] - a[i - 1]) {
j++;
}
}
s[j].push(a[i]);
}
j = 0;
for (i = 0; i < 10; i++) {
if (s[j].empty()) {
j++;
}
if (i + 1 != s[j].top()) {
k = false;
}
s[j].pop();
}
if (k == true) {
cout << "Yes\n";
} else {
cout << "No\n";
}
j = 0, k = true;
}
return 0;
}
...全文
477 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
halleyzhang3 2013-11-01
  • 打赏
  • 举报
回复
做程序员的小明果然比上学的小明聪明
还有多远 2013-10-31
  • 打赏
  • 举报
回复
一道经典面试题哦:如果“给定的出栈序列”是一个可能的序列,则必需在某种入栈方式下(要保证入栈的先后顺序是1~N),出栈序列的下一个元素是栈顶

bool isPossible(int popSequence[], int N)
{
    int n = 1, nextToPopOut;
    stack<int> st;
    
    for(nextToPopOut = 0; nextToPopOut < N; ++nextToPopOut){
        while(st.empty() || st.top() != popSequence[nextToPopOut]){
            if(n > N) return false;//1~N已经全部入栈过一次了,但是仍不能满足出栈顺序
            st.push(n++);
        }
        //能运行到这里必然有st.top() = popSequence[nextToPopOut]了
        st.pop();
    }
    return true;
}
buyong 2013-10-31
  • 打赏
  • 举报
回复
提出错了。输入必须是1到10,否则编号有什么用?
FancyMouse 2013-10-11
  • 打赏
  • 举报
回复
和我想象中的解法完全不同。你得解释为什么你觉得这个代码是对的。
掌握数据结构和算法,可称为算法工程师!这是成为架构师的基础,有Google算法大神亲授。我保证你可以写出时空复杂度都很优的架构。有人专门答疑哟!你想要成为架构工程师吗?立即点击报名按钮吧!北上广容不下肉身,三四线放不下灵魂,程序员里没有穷人,有一种土豪叫 算法工程师。程序 = 数据结构 + 算法程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。编程实战算法,不是念PPT,我们讲的就是实战与代码实现与企业应用。程序 = 数据结构 + 算法           ——图灵奖得主,计算机科学家N.Wirth(沃斯)作为程序员,我们做机器学习也好,做python开发也好,java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据结构日常增删改查 + 粘贴复制 + 搜索引擎可以实现很多东西。同样,这样也是没有任何竞争力的。我们只可以粘贴复制相似度极高的功能,稍复杂的逻辑没有任何办法。语言有很多,开发框架更是日新月异3个月不学就落后我们可以学习很多语言,很多框架,但招聘不会考你用5种语言10种框架实现同一个功能。真正让程序员有区分度,企业招聘万年不变的重点 —— 算法与数据结构。算法代表程序员水平的珠穆朗玛。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧