通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"NOIP真题" 试卷中 NOIP第十八届全国青少年信息学奥林匹克联赛初赛试题[2012提高组] 中有题目如下:
第1题
(壳栈)小 Z 设计了一种新的数据结构“新壳栈”。首先,它和传统的栈一样支持压入、弹出操作。此外,其栈顶的前 c 个元素是它的壳,支持翻转操作。其中,c > 2 是一个固定的正整数,表示壳的厚度。小 Z 还希望,每次操作,无论是压入、弹出还是翻转,都仅用与 c 无关的常数时间完成。聪明的你能帮助她编程实现“新壳栈”吗?
程序期望的实现效果如以下两表所示。其中,输入的第一行是正整数 c,之后每行输入都是一条指令。另外,如遇弹出操作时栈为空,或翻转操作时栈中元素不足 c 个,应当输出相应的错误信息。
#include <iostream> using namespace std; const int NSIZE = 100000,CSIZE = 1000; int n, c, r, tail, head, s[NSIZE], q[CSIZE]; //数组 s 模拟一个栈,n 为栈的元素个数 //数组 q 模拟一个循环队列,tail 为队尾的下标,head 为队头的下标 bool direction, empty; int previous(int k){ if (direction) return ((k + c - 2) % c) + 1; else return (k % c) + 1; } int next(int k){ if (direction) ①; else return ((k + c - 2) % c) + 1; } void push(){ int element; cin>>element; if (next(head) == tail) { n++; ②; tail = next(tail); } if (empty) empty = false; else head = next(head); ③= element; } void pop(){ if (empty) { cout<<"Error: the stack is empty!"<<endl; return; } cout<<④<<endl; if (tail == head) empty = true; else { head = previous(head); if (n > 0) { tail = previous(tail); ⑤= s[n]; n--; } } } void reverse(){ int temp; if (⑥== tail) { direction = !direction; temp = head; head = tail; tail = temp; }else cout<<"Error: less than "<<c<<" elements in the stack!"<<endl; } int main(){ cin>>c; n = 0; tail = 1; head = 1; empty = true; direction = true; do{ cin>>r; switch (r) { case 1: push();break; case 2: pop();break; case 3: reverse();break; } } while (r != 0); return 0; }
所属试卷:NOIP第十八届全国青少年信息学奥林匹克联赛初赛试题[2012提高组]
下列关于模板的叙述中,正确的是
以下不正确的是。
执行代码段(bool x=true,y=false,z
(读者自行创建,注意每行第一个逗号后面有空格),其内容
给定程序MODI1.C中函数fun功能是:将长整型数中
下列数据结构中,能够按照“先进后出”原则存取数据的是
以下不能用于描述算法的是( )。
以下程序中给数组所有元素输入数据,请从选项中选择正确的
以下选项中表示一个合法的常量是(说明:符号u表示空格)
读程序写结果1.2.#include<iostream
使用运算符测试集合包含集合A是否为集合B的真子集的表达
设文件number.dat中存放了一组整数。请编写程序
以下程序的功能是:借助指针变量找出数组元素中最大值所在
在超级用户下显示Linux系统中正在运行的全部进程,应
命令组合(命令表)将 ______ 来执行命令。
如果用户想对某一命令详细的了解,可用
man 5 passwd 含义是?
选择数据库TEST为当前数据库的命令是 。
从D盘根目录备份文件bak1.sql中恢复数据库stu
设外存上有 120 个初始归并段,进行 12 路归并时
若有定义:则C编译系统为数组s开辟_____个字节的内
函数不可以进行嵌套定义,但可以进行嵌套_____。
有三个关系R、S和T如下:则由关系R和S得到关系T的操
设循环队列的存储空间为Q(1:35),初始状态为fro
假设输入的 n 是不超过 50 的正整数,d[i][0
输入 :3AB:ACDEbFBkBDAR:ACDBrT
(两元序列)试求一个整数序列中,最长的仅包含两个不同整
在布尔逻辑中,逻辑“或”的性质有( )。
输出: _______________________
冗余数据是指可以由其他数据导出的数据,例如,数据库中已
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2