首页 > 信息技术
一个c语言题,求解答
设有n根柱子,每根柱子上有一个圆盘,圆盘上有一个正整数,不同圆盘上的数不同。初始时假定柱子按照其上圆盘上数的大小从左向右排列,移动规则是从左向右看,当前一根柱子最下圆盘上数与后一根柱子最上圆盘上数相加的和是一个完全平方数时,前一根柱子上所有圆盘移动到后一根柱子上方。要求你编写程序,输入柱子数目和圆盘上的整数,输出移动的过程和结果。 【功能要求】1. 任意输入数据,第一个数据为柱子的个数,后续的数据为柱子上数的值。2. 将结果分行输出,一行输出一种组合。 3. 使用函数调用完成题目功能,主函数负责数据的输入与输出,子函数负责运算
https://blog.csdn.net/weixin_42145502/article/details/83686673
#include <stdio.h>
#include <string.h>
/*
算法思路:1将 n-1个盘子先放到B座位上
2.将A座上地剩下的一个盘移动到C盘上
3、将n-1个盘从B座移动到C座上
*/
//函数声明
void move(char x, char y);
void hannuo(int n,char one ,char two,char three)
{
if(n==1)move(one, three); //递归截止条件
else
{
hannuo(n-1,one ,three,two);//将 n-1个盘子先放到B座位上
move(one,three);//将A座上地剩下的一个盘移动到C盘上
hannuo(n-1,two,one,three);//将n-1个盘从B座移动到C座上
}
}
void move(char x,char y)
{
printf("%c--->%c",x,y)
}
int main()
{
int n;
printf("input your number");
scanf("%d",&n);
hannuo(n,'A','B','C');
return 0;
}