11.27 小白的每日一C
本帖最后由 吾爱姚吕婧妍 于 2018-11-27 21:35 编辑递归 逆序
#include<stdio.h>
void reverse(int n);
int main()
{
int n;
printf("Inter a number you want to : ");
scanf("%d",&n);
reverse(n);
return 0;
}
void reverse(int n)
{
if(n<=9)
printf("%d",n);
else
{
printf("%d",n%10);
reverse(n/10);
}
}
// 汉诺塔问题 一个明白算法 较难理解的c语言
/*汉诺塔问题是指:一块板上有三根针 A、B、C。
A 针上套有 64 个大小不等的圆盘,按照大的在下、小的在上的顺序排列,要把这 64 个圆盘从 A 针移动到 C 针上,每次只能移
动一个圆盘,移动过程可以借助 B 针。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。从键盘输入需移动的圆盘个数,给出移动的过程。*/
// 这里 A是搬动源 B是搬动目的 C是中间过度
#include<stdio.h>
void hanio(int n,char a,char b,char c);
int main()
{
int n;
printf("You want to move : ");
scanf("%d",&n);
hanio(n,'A','B','C');
return 0;
}
void hanio(int n,char a,char b,char c)
{
if(n==1)
printf("%c-->%c\n",a,b);
else
{
hanio(n-1,a,c,b);
printf("%c-->%c\n",a,b);
hanio(n-1,c,b,a);
}
}
// 这个问题 可以看着 原理来讲有 三个 盘 A是搬动源 B是搬动目的 C是中间过度
// 其实就是A中是按由大到小 自下向上排序 它的目的是将其移动到 另一个盘C上 并且 每次只能移动一个还保证每个盘都是大的在下 小的在上
// 如果只有三个 那么首先a-->b a-->c b-->c a-->b c-->a c-->b a-->b
//或者你自己想当n=3 首先要怎么办 然后你的函数 需要怎么变化 你就知道 为什么它要改变 a,b,c 的值了
本帖最后由 ~零度 于 2018-11-27 21:36 编辑
我记得写过这个代码,待会我发到这里。
算了,我刚刚看了我所有的作业没找到这个。但是找到一个变种汉诺塔问题的c++代码,你需要的话我可以分享到这里。
#include "stdafx.h"
int count=0;
void move(char A,char C)
{
printf("%c->%c\n",A,C);
count++;
}
void hnt(int n,char A,char B,char C)
{
if(1==n)
{
move(A,C);
}
else
{
hnt(n-1,A,C,B);
move(A,C);
hnt(n-1,B,A,C);
}
}
int main(int argc, char* argv[])
{
hnt(3,'A','B','C');//3表示三层
printf("count=%d\n",count);
return 0;
}
这个以前也没有搞太明白。。但是好像没怎么在农实践中用过。 samen 发表于 2018-11-27 21:39
这个以前也没有搞太明白。。但是好像没怎么在农实践中用过。
好滴 这些东西可能就是培养一下思维吧
好难啊,学不会。 学习了,楼主。。。 主要就是了解一下递归是怎么回事 初学的时候 xake 发表于 2018-11-28 20:56
主要就是了解一下递归是怎么回事 初学的时候
好的 谢谢兄弟给的提醒 ~零度 发表于 2018-11-27 21:13
我记得写过这个代码,待会我发到这里。
算了,我刚刚看了我所有的作业没找到这个。但是找到一个变种汉诺 ...
感谢感谢{:1_893:}{:1_893:}{:1_893:}
希望你能分享一下 最好是回帖不然忙的时候看不到 不好意思呀
页:
[1]
2