扫描关注一起学嵌入式,一起学习,一起成长
1.汉诺塔:请输入盘子数,输出盘子移动的操作步骤。
#include <stdio.h>
void move(char from, char to) {
printf("%c to %c\n", from, to);
}
void hanoi(int n, char a, char b, char c) {
if (n == 1)
move(a, c);
else {
hanoi(n - 1, a, c, b);
move(a, c);
hanoi(n - 1, b, a, c);
}
}
void main() {
int n;
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
}
2.爬楼梯:树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。
#include <stdio.h>
int stair(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
return stair(n - 1) + stair(n - 2);
}
void main() {
int n;
scanf("%d", &n);
printf("%d", stair(n));
}
3.爬楼梯:树老师爬楼梯,他可以每次走1级、2级或者3级,输入楼梯的级数,求不同的走法数。
#include <stdio.h>
int stair(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
if (n == 3) return 4;
return stair(n - 1) + stair(n - 2) + stair(n - 3);
}
void main() {
int n;
scanf("%d", &n);
printf("%d", stair(n));
}
4.斐波那契数列:请输入项数,输出具体数列。
#include <stdio.h>
int fibonacci(int n) {
if (n == 1 || n == 2)
return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
void main() {
int n, i;
scanf("%d", &n);
for (i = 1; i <= n; i++)
printf("%d,", fibonacci(i));
}
5.求阶乘:请输入整数n,求1!+2!+3!+4!+5!+6!+7!+…+n!的和。
#include <stdio.h>
int factorial(int n) {
if (n == 1) return 1;
return n * factorial(n - 1);
}
void main() {
int n, i, sum = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
sum += factorial(i);
printf("sum=%d", sum);
}
6.取球问题:在n个球中,任意取m个(不放回),求有多少种不同取法。
#include <stdio.h>
int ball(int n, int m) {
if (n < m) return 0;
if (n == m) return 1;
if (m == 0) return 1;
return ball(n - 1, m - 1) + ball(n - 1, m);
}
void main() {
int n, m;
scanf("%d%d", &n, &m);
printf("%d", ball(n, m));
}
7.杨辉三角:输入要打印的层数,打印杨辉三角。
#include <stdio.h>
int triangle(int m, int n) {
if (m == 0 || n == 0 || m == n)
return 1;
return triangle(m - 1, n) + triangle(m - 1, n - 1);
}
void main() {
int n, i, j;
scanf("%d", &n);
for (i = 0; i < n; i++) {
for (j = 0; j <= i; j++) {
printf("%d ", triangle(i, j));
}
printf("\n");
}
}
8.求年龄:有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁。问第4个人多少岁,他说比第3个人大2岁。问第3个人多少岁,他说比第2个人大2岁。问第2个人多少岁,他说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人多大?
#include <stdio.h>
int age(int n) {
if (n == 1) return 10;
return age(n - 1) + 2;
}
void main() {
printf("%d", age(5));
}
9.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第十天早上想再吃时,见只剩下一个桃子了。问最初有多少个桃子。
递归:
#include <stdio.h>
int peach(int n) {
if (n == 10) return 1;
return (peach(n + 1) + 1) * 2;
}
void main() {
printf("%d", peach(1));
}
循环:
#include <stdio.h>
void main() {
int i, s = 1;
for (i = 9; i >= 1; i--) {
s = (s + 1) * 2;
}
printf("%d", s);
}
10.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。第十天同样是吃了前一天的一半加一个,最后剩下一个桃子。问最初有多少个桃子。
递归:
#include <stdio.h>
int peach(int n) {
if (n == 11) return 1;
return (peach(n + 1) + 1) * 2;
}
void main() {
printf("%d", peach(1));
}
循环:
#include <stdio.h>
void main() {
int i, s = 1;
for (i = 10; i >= 1; i--) {
s = (s + 1) * 2;
}
printf("%d", s);
}
11.最大公约数:利用递归算法求两个数的最大公约数。
#include <stdio.h>
/* 最大公约数 */
int gcd(int a, int b) {
int t;
if (a < b) {
t = a;
a = b;
b = t;
}
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
void main() {
int a, b;
scanf("%d%d", &a, &b);
printf("gcd=%d", gcd(a, b));
}
12.逆序输出:输入一个正整数,将该正整数逆序输出。
#include <stdio.h>
void printDigit(int n) {
printf("%d", n % 10);
if (n > 10) {
printDigit(n / 10);
}
}
void main() {
int n;
scanf("%d", &n);
printDigit(n);
}
13.逆序输出:输入一个字符串,将该字符串逆序输出。
#include <stdio.h>
void printStr(char *str) {
if (*str != '\0')
printStr(str + 1);
if (*str != '\0')
printf("%c", *str);
}
void main() {
char str[100];
gets(str);
printStr(str);
}
文章来源于网络,版权归原作者所有,如有侵权,请联系删除。
关注【一起学嵌入式】,回复“加群”进技术交流群。
觉得文章不错,点击“分享”、“赞”、“在看” 呗