✨博文作者:烟雨孤舟
💖 喜欢的可以 点赞 收藏 关注哦~~✍️ 作者简介: 一个热爱大数据的学习者
✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教!
目录
数的阶乘
代码逻辑:
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;
}