任务1:汉诺塔问题。
任务描述:修改代码输出汉诺塔问题的全部移动步骤,初始状态所有圆盘在B塔,要求移动到A塔。将代码复制粘贴到方框中,将运行结果截图。
void hanoi(int n,char a,char b,char c)
{//把n个盘子从a柱移动到c柱
if(n>0)
{
hanoi(n-1,a,c,b);//n-1个盘子从a移动到b
printf("%c->%c\n",a,c);//1个盘子从a移动到c
hanoi(n-1,b,a,c);//n-1个盘子从b移动到c
}
}
#include<iomanip> using namespace std; void hanoi(int n,char a,char b,char c) { if(n>0) { hanoi(n-1,a,c,b); cout<<n<<setw(5)<<a<<setw(5)<<c<<endl; hanoi(n-1,b,a,c); } } int main() { char a='A',b='B',c='C'; int n; cout<<"输入盘片数:"; cin>>n; hanoi(n,a,b,c); } |
任务2:正整数逆序输出
任务描述:输入任意一个不大于9位的正整数,输出各位数的逆序形式,例如:输入12345,输出54321。请分别利用递归和递推两种方式编写程序求解问题。
递归: #include<stdio.h> void show(int n) { printf("%d",n%10); n=n/10; if(n>0) show(n); } int main() { int n; scanf("%d",&n); show(n); return 0; } 递推: #include<iostream> using namespace std; int main() { long long n; cin >> n; while(n) { cout << n % 10; n /= 10; } return 0; } |