C++队列(练习题)

发布时间:2026/6/25 22:05:02

C++队列(练习题) 生日密码【描述】密码由生日作为基数8位数字生成密码的规则如下:将第1个数字删除第2个数字放到数字序列末端再将第3个数字放到数字序列末端。重复执行第一步直到所有数字删除完毕。删除的数字将会组成一串新的数字这就是密码。【输入格式】一行,一组八位数字。【输出格式】一行,八位数字生成的密码。【输入样例】18781205【输出样例】18075281#includeiostreamusingnamespacestd;#defineMAXN9intq[MAXN]{0};//循环队列最多能存储(MAXN-1)个元素inthead0;// 指向队头inttail0;// 指向队尾下一个boolempty(){returnheadtail?true:false;}voidpush(intx){if((tail1)%MAXN!head){// 队列不满q[tail]x;tail(tail1)%MAXN;}}voidpop(){if(!empty()){// 队列不空head(head1)%MAXN;}}intfront(){if(!empty())returnq[head];coutQueue is empty;return-1;}intmain(){charch[9];cinch;for(inti0;i7;i){//8个数字依次入队push(ch[i]-0);}// 开始报数1~3直到队列为空intcnt1;// 报的数while(!empty()){if(cnt1){// 将第1个数字删除coutfront();pop();}else{// 第2、3个数字放到数字序列末端intxfront();// 队首pop();push(x);}cnt;// 1~3循环报数if(cnt4)cnt1;}return0;}/* 【输入用例2】 12345678 【输出用例2】 14738625 【输入用例3】 00000000 【输出用例3】 00000000 【输入用例4】 87654321 【输出用例4】 85261374 【输入用例5】 99999999 【输出用例5】 99999999 【输入用例6】 13572468 【输出用例6】 17658432 */括号匹配验证【描述】验证括号序列合法性合法性是指左括号必须要有相对应的右括号括号类型分为[]与两种。【输入描述】输入一串由[、]、、、符号组成的字符串【输出描述】输出该字符串是否合法【样例输入1】[]【样例输出1】合法【样例输入2】[]【样例输出2】非法#includeiostreamusingnamespacestd;// 判断括号字符串是否合法的函数仅支持小括号和中括号// 参数char* s - 待检查的括号字符串// 返回值bool - 合法返回true非法返回falseboolisValid(char*s){intstack[1005],top-1;// 定义栈数组和栈顶指针for(inti0;s[i];i)// 遍历字符串的每个字符{if(s[i](||s[i][)// 如果是左括号stack[top]s[i];// 栈顶指针先1再将左括号压入栈else// 如果是右括号{if(top-1)returnfalse;// 栈为空无左括号匹配直接返回非法charcstack[top--];// 取出栈顶左括号栈顶指针-1// 检查括号是否匹配右小括号必须匹配左小括号右中括号必须匹配左中括号if((s[i])c!()||(s[i]]c![))returnfalse;// 不匹配则返回非法}}returntop-1;// 遍历结束后栈必须为空所有左括号都被匹配才算合法}intmain(){constintMAX_LEN20;// 定义输入字符串的最大长度防止溢出charstr[MAX_LEN];// 存储输入的括号字符串cin.getline(str,MAX_LEN);// 读取输入支持包含空格的字符串最多读取19个字符结尾\0// 调用isValid函数判断合法性输出合法或非法cout(isValid(str)?合法:非法)endl;return0;}/* 【输入用例2】 ()[] 【输出用例2】 合法 【输入用例3】 ([]) 【输出用例3】 合法 【输入用例4】 ([)] 【输出用例4】 非法 【输入用例5】 )( 【输出用例5】 非法 【输入用例6】 【输出用例6】 合法 */杨辉三角生成【描述】用队列相关知识生成杨辉三角【输入描述】输入一个大于0的正整数nn表述杨辉三角的行数【输出描述】输出对应的n行杨辉三角【样例输入】5【样例输出】11 11 2 11 3 3 11 4 6 4 1#includeiostream#includequeue#includevectorusingnamespacestd;intmain(){intn;cinn;//输入要生成的杨辉三角行数queueintq;q.push(1);// 初始化第一行for(inti1;in;i){// 输出前导空格使每行居中for(intspace0;spacen-i;space){cout ;}// 保存当前行的元素并输出vectorintcurrent_row;boolfirst_elementtrue;// 标记是否为当前行第一个元素避免前导空格while(!q.empty()){intnumq.front();q.pop();if(first_element){coutnum;first_elementfalse;}else{cout num;}current_row.push_back(num);}coutendl;// 生成下一行的元素并入队queueintnext_q;next_q.push(1);// 下一行首元素为1// 计算中间元素当前行相邻元素之和for(intj0;jcurrent_row.size()-1;j){next_q.push(current_row[j]current_row[j1]);}if(!current_row.empty()){// 下一行尾元素为1当前行非空时next_q.push(1);}qnext_q;// 更新队列为下一行}return0;}/* 【输入用例2】 1 【输出用例2】 1 【输入用例3】 3 【输出用例3】 1 1 1 1 2 1 【输入用例4】 9 【输出用例4】 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 【输入用例5】 15 【输出用例5】 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1 1 12 66 220 495 792 924 792 495 220 66 12 1 1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1 1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1 【输入用例6】 20 【输出用例6】 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1 1 12 66 220 495 792 924 792 495 220 66 12 1 1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1 1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1 1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1 1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1 1 17 136 680 2380 6188 12376 19448 24310 24310 19448 12376 6188 2380 680 136 17 1 1 18 153 816 3060 8568 18564 31824 43758 48620 43758 31824 18564 8568 3060 816 153 18 1 1 19 171 969 3876 11628 27132 50388 75582 92378 92378 75582 50388 27132 11628 3876 969 171 19 1 */反转队列元素【描述】自定义输入一串队元素然后反转队列中的元素顺序接着输出这些元素。【输入描述】输入为两行第一行数字n表示元素的个数不超过100个第二行输入n个元素【输出描述】输出反转前与反转后的对列元素顺序【样例输入】52 4 6 8 10 12【样例输出】反转前2 4 6 8 10反转后10 8 6 4 2#includeiostream#includequeue#includestackusingnamespacestd;// 使用栈辅助反转队列voidreverseQueueWithStack(queueintq){stackinttemp_stack;// 辅助栈// 步骤1将队列元素全部出队并压入栈队列FIFO → 栈LIFOwhile(!q.empty()){temp_stack.push(q.front());q.pop();}// 步骤2将栈中元素弹回队列栈顶→队尾实现顺序反转while(!temp_stack.empty()){q.push(temp_stack.top());temp_stack.pop();}}// 辅助函数打印队列元素voidprintQueue(constqueueintq){queueinttempq;// 复制队列避免修改原队列while(!temp.empty()){couttemp.front() ;temp.pop();}coutendl;}intmain(){queueintq;intnum[100];//存贮输入队列元素intn;cinn;// 初始化队列for(inti1;in;i){cinnum[i];q.push(num[i]);}cout反转前;printQueue(q);// 输出1 2 3 4 5reverseQueueWithStack(q);cout反转后;printQueue(q);// 输出5 4 3 2 1return0;}/* 【输入用例2】 3 1 1 1 【输出用例2】 反转前1 1 1 反转后1 1 1 【输入用例3】 6 1 2 3 4 5 6 【输出用例3】 反转前1 2 3 4 5 6 反转后6 5 4 3 2 1 【输入用例4】 1 99 【输出用例4】 反转前99 反转后99 【输入用例5】 9 1 25 6 89 101 265 512 1999 2020 【输出用例5】 反转前1 25 6 89 101 265 512 1999 2020 反转后2020 1999 512 265 101 89 6 25 1 【输入用例6】 9 -1 -2 -3 -4 0 4 3 2 1 【输出用例6】 反转前-1 -2 -3 -4 0 4 3 2 1 反转后1 2 3 4 0 -4 -3 -2 -1 */

相关新闻