✨博文作者:烟雨孤舟
💖 喜欢的可以 点赞 收藏 关注哦~~✍️ 作者简介: 一个热爱大数据的学习者
✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教!
目录
数的阶乘
打印整数的位数
字符串个数统计
斐波那契数列
穷举算法
汉诺塔问题
数的阶乘
代码逻辑:
sum=n*n(n-1)*(n-2)....1
代码:
#include <stdio.h>
int factorial(int i){if(i = 1) return 1;return i * factorial(i - 1);
}
int main(){int i = 15;printf("%d 的阶乘为 %f\n", i, factorial(i));return 0;
}
打印整数的位数
代码逻辑:
判断输入的n是否是个位数,如果是直接输入,不是在调用递归函数方法为n/10可以让每次递归时n的个数每次减一,根据n%10,打印出每次递归时n的个位数
代码:
#include<stdio.h>
void digui(int n);
int main(){int n;scanf("%d",&n);digui(n);return 0;
}
void digui(int n){if(n>9){digui(n/10);}printf("%d",n%10);
}
字符串个数统计
代码逻辑:
strlen(abcdef\0)
1+strlen(bcdef\0)
1+1+strlen(cdef\0)
1+1+1+strlen(def\0)
1+1+1+1+strlen(ef\0)
1+1+1+1+1+strlen(f\0)
1+1+1+1+1+1+strlen(\0)
代码
#include<stdio.h>
int my_strlen(char* ch)
{if (*ch != '\0'){return 1 + my_strlen(ch + 1);}return 0;
}
int main()
{char ch[20] = { 0 };scanf("%s", &ch);printf("%d", my_strlen(ch));return 0;
}
斐波那契数列
数列前两项都是1,后面任意一项都是其前两项之和。1 1 2 3 5 8 13 21 34
代码:
#include <stdio.h>
int main()
{int x1=1, x2=1,x;printf("%d\t%d\t",x1,x2);for (int i = 0; i < 8; i++){x =x1+x2;printf("%d\t",x);x1=x2;x2=x;}return 0;
}
穷举算法
某工地搬砖已知男人一人搬3块、女人一人2块,小孩两人1块,有多少方法用45个人刚好搬45块
#include <stdio.h>
int main(){int child,men,women;for(men=0;men<=15;men++)for(women=0;women<=22;women++){child=45-women-men;if(men*3+women*2+child*0.5==45)printf("men=%d,women=%d child=%d\n",men,women,child);}return 0;
}
汉诺塔问题
有三根柱子,分别为A、B、C ,A柱上从上到下依次排列着由小到大的圆盘,我们需要把圆盘从A柱按照同样的摆放顺序放到C柱上,期间我们可以借助B柱。
每次只能挪动一个且是最上面的圆盘
按照从上到下依次是由小到大的顺序摆放。
#include<stdio.h>
#include<stdlib.h>
void move(char x, char y) //输出移盘方案
{printf("%c->%c\n", x, y);
}
void hanoi(int n, char one, char two, char three)//移盘
{if (n == 1)move(one, three);//如果是1个盘,直接从第一个座移到第3个座上else{hanoi(n - 1, one, three, two); move(one, three);hanoi(n - 1, two, one, three);}
}
int main()
{int n;printf("输入盘的个数\n");scanf("%d", &n);printf("移盘的步骤:\n");hanoi(n, 'A', 'B', 'C');system("pause");return 0;
}