c++栈函数-c++输出时,是需要用栈吗?

问题描述

c++输出时,是需要用栈吗?
【问题描述】
一个国王因为听信谗言将一个无辜的数学家关进了监狱。虽然事后发现确属冤枉,但碍于面子,国王不肯认错。为了挽回,于是国王决定用Bytish锁链将其锁在墙上。这种锁链由n(10≤n≤1000)个固定在墙上的铁环和铁棒组成。由于环不是都套在棒上,要想把整副锁链取下是十分困难的。数学家必须自己通过不断取下和套上铁环最终将所有铁环都取下才能获得自由。取下或套上铁环的规则是:
? 铁环从1、2、……、n依次编号。
? 一次只能把一个环取下或套上。
? 编号为1的环无论何时都能取下或套上。
? 如果编号为1、……、k-1(1≤k≤n)的环已经从棒上取下,并且k环套在棒上,则可以取下或套上编号为k+1的环。
写一个程序,读入锁链描述并计算从棒上取下所有环所需的最少步数。
【基本要求】
显然,可以运用递归的方法解决此问题。但是你能否找到一个非递归算法呢?
【输入输出】
输入:环的总数n。
输出:为尽量体现程序输出结果的层次,可以按照从n、n-1、n-2、……、1的顺序,将移除掉n号环的全部过程作为一个段落输出,然后将移除n-1号环的全部过程也作为一个段落输出,其余依此类推。
【实现提示】
显然,通过枚举前i个环的解锁过程可以从中找出解题的思路。
当n=1时,直接移除即得解。
当n=2时,显然不能先移出1环,再移除2环。因为根据约束条件,必须1环在棒上才能移除2环。因此移除的步骤应该是先2环,再1环。
当n=3时,移除3环的条件是2环在,1环卸,于是可以先移除1环,然后移除3环,然后套上1环,然后移除2环和1环。
当n≥4的情形请自行推导。

时间: 2024-09-19 09:13:18

c++栈函数-c++输出时,是需要用栈吗?的相关文章

c++ 的 printf函数的输出问题

问题描述 c++ 的 printf函数的输出问题 假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少? int main(){ long long a = 1, b = 2, c = 3 printf("%d %d %d ", a, b, c); return 0; } A 1,2,3 B 1,0,2 C 1,3,2 D 3,2,1 解决方案 printf 函数问题C语言中printf格式化输出函数C语言中printf格式化输出函数 解决方案二: 应该

编码显示c函数被调用时在源文件中的位置

问题描述 编码显示c函数被调用时在源文件中的位置 编码显示c函数被调用时在源文件中的位置. 例如 void test{ //在这里弹出对话框,显示被调用时的位置. } 在函数 void testCall(){ test(); //在这里弹出对话框,显示testCall 在源文件中的行号(+1) } 当执行到 testCall()时显示行test()所在行号---不是void test{}的行号,而是 void testCall(){}的行号(+1) 解决方案 这个像是编译器做的事情.分析源码吧

c语言-数据结构C语言字符串的输出时总是少输出最后一个字符,这是怎么回事啊?

问题描述 数据结构C语言字符串的输出时总是少输出最后一个字符,这是怎么回事啊? 代码如下: #include #include struct SeqString { int MAXNUM;//字符串的最大个数 int n;//字符串的长度 char c;//存储基地址 }; typedef struct SeqString *PSeqString; PSeqString CreatNullStr(int m); void InitStr(PSeqString pstr); /***主函数****

C++ 用指向指针的指针的方法对5个字符串排序并输出时遇到的问题

问题描述 C++ 用指向指针的指针的方法对5个字符串排序并输出时遇到的问题 //用指向指针的指针的方法对5个字符串排序并输出 void sort(char **p) { char* temp=new char;//为什么没有长度呢?这么可以没有长度呢?? for(int j=0;j<5;j++) { for(int k=j;k<5;k++) { if(strcmp(p[j],p[k])>0) { temp=p[j]; p[j]=p[k]; p[k]=temp; } } } } int m

PHP4 的新函数介绍 - 输出信息控制函数 ,以前别人转发的

函数|控制 PHP4 的新函数介绍 - 输出信息控制函数   魔族精灵 这些函数可以让你控制你的脚本输出的内容.可以用于许多不同的情况,特别是在你的脚本已经输出信息后需要发送文件头新的情况. 输出控制函数不对使用 header() 或 setcookie() 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用. 例 1. 控制输出 <?php ob_start(); echo "Hello\n"; setcookie ("cookie

OnItemSelectedListener 监听器下调用函数 怎么输出结果为空

问题描述 OnItemSelectedListener 监听器下调用函数 怎么输出结果为空 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.test_layout, container, false); spinner=(Spinner)view.fi

pat-PAT1009 c语言字符串问题 我写的程序输出时起始位置会多一个空格,如何改正才能没有空格

问题描述 PAT1009 c语言字符串问题 我写的程序输出时起始位置会多一个空格,如何改正才能没有空格 #include #include int main(){ int i,j=0,m,k=0; char sen[100]; char s[10][20]; gets(sen); m=strlen(sen)+1; for(i=0;i<m;i++){ if(sen[i]==''){ s[j][k]=''; k=0; j++; } if(sen[i]==' ') { s[j][k]=''; k=0;

nslog-NSLog输出时系统自带的一串东西各自代表什么意思

问题描述 NSLog输出时系统自带的一串东西各自代表什么意思 2015-01-23 09:04:27.732 BOEA[2140:607] 解决方案 2015-01-23 09:04:27.732 BOEA[2140:607] boea是你的项目名称或模块名称吧.

linux shell脚本 两个变量中间有一个/ 一起输出时前面的变量出不来

问题描述 linux shell脚本 两个变量中间有一个/ 一起输出时前面的变量出不来 配置文件config.txt 内容为: abc=/home/test 计划在shell脚本中获取等号后面的路径,shell脚本如下; #!/bin/bash var=`grep abc /home/test/config.txt` #获取abc开头的一行 echo $var put_path=${put_line##*=} #截取等号后面路径 echo "${put_path}/1.txt" 可以获