用户输入一个整数n,分别输出1!,2!,…,n!,其中每个数据占20列,并且每行只输出五个元素
n没有范围么,先用int,不够的话换long吧
#include <stdio.h>
int factorial(int n) {
if (n <= 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n;
printf("请输入 n:");
scanf("%d", &n);
printf("各阶乘如下所示:\n");
for (int i = 1; i <= n; i++) {
int f = factorial(i);
if ((i - 1) % 5 == 0) {
printf("\n");
}
printf("%d!=%-*d", i,20, f);
}
printf("\n");
return 0;
}
参考如下:
#include <stdio.h>
#include <time.h>
int main()
{
int n;
scanf("%d", &n);
long long fac = 1L;
for (int i = 1; i <= n; i++)
{
fac = 1L;
for (int j = 1; j < i; j++)
{
fac *= j;
}
printf("%20lld", fac);
if (i % 5 == 0)
printf("\n");
}
return 0;
}
(1)解题思路:
若n为1级台阶:f(1) = 1 (只可能有一种跳法)
若n为2级台阶:f(2) = f(2 - 1) + f(2 - 2)(会有两个跳台阶的方法,一次1阶或者一次2阶)
若n为3级台阶:f(3) = f(3 - 1) + f(3 - 2) + f(3 - 3)(会有三种跳台阶的方法,一次1阶、2阶、3阶)
……
……
若n为(n - 1)级台阶:
f(n-1) = f((n-1)-1) + f((n-1)-2) + … + f((n-1)-(n-2)) + f((n-1)-(n-1))
f(n-1) = f(0) + f(1)+f(2)+f(3) + … + f((n-1)-1)
f(n-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)
若n为n级台阶:
f(n) = f(n-1) + f(n-2) + f(n-3) + … + f(n-(n-1)) + f(n-n)
f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1)
结合f(n-1)和f(n)的情况你会发现f(n) = f(n-1) + f(n-1),所以可得: f(n) = 2*f(n-1)。
#include<stdio.h>
int frog_jump_step(int n)
{
if (n <= 1)
{
return 1;
}
else
return 2 * frog_jump_step(n - 1);
}
int main()
{
int n = 0;
printf("请输入青蛙应该跳的台阶个数:");
scanf("%d", &n);
int sum = frog_jump_step(n);
printf("一共有种%d种跳法\n", sum);
return 0;
}