文章目录
- 第1关:从自然数中取3个数进行组合之循环算法
- 任务描述
- 编程要求
- 测试说明
- 参考答案
- 第2关:从自然数中取3个数进行组合之递归算法
- 任务描述
- 编程要求
- 测试说明
- 参考答案
- 第3关:求n的阶乘n!
- 任务描述
- 编程要求
- 测试说明
- 参考答案
- 第4关:求斐波那契额数列的前10项
- 任务描述
- 编程要求
- 测试说明
- 参考答案
第1关:从自然数中取3个数进行组合之循环算法
任务描述
本关任务:用循环算法找出 5 个自然数中取 3 个数的组合。
编程要求
请在右侧编辑器Begin-End处补充代码,完成本关任务。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:5 3 (n=5,r=3;,表示从1,2,3,4,5自然数中选择 3 个数)
预期输出:
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
参考答案
#include <stdio.h>void combloop1(int n, int r)
{/********** Begin **********/for(int i=1;i<=n;i++){for(int j=2;j<=n;j++){for(int k=3;k<=n;k++)if((i<j)&&(j<k)){printf("%d %d %d",i,j,k);printf("\n");}}}/********** End **********/
}void main()
{int n,r;scanf("%d%d",&n,&r);combloop1(n,r);
}
第2关:从自然数中取3个数进行组合之递归算法
任务描述
本关任务:用递归算法找出 5 个自然数中取 3 个数的组合。
编程要求
请在右侧编辑器Begin-End处补充代码,完成本关任务。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:5 3 (n=5,r=3;,表示从1,2,3,4,5自然数中选择 3 个数)
预期输出:
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
参考答案
#include <stdio.h>
int a[100];
void combrecur(int n, int r)
{/********** Begin **********/int i,j;for(i=n;i>=r;i--){ a[r]=i;if(r>1){combrecur(i-1,r-1);}else{for(j=a[0];j>0;j--){printf("%d",a[j]);printf(" ");}printf("\n");}}/********** End **********/
}void main()
{/********** Begin **********/int n,r;scanf("%d %d",&n,&r);if(n>r){a[0]=r;combrecur(n,r);}/********** End **********/
}
第3关:求n的阶乘n!
任务描述
本关任务:用循环和递归算法求 n(小于 10 的正整数) 的阶乘 n!。
编程要求
请在右侧编辑器Begin-End处补充代码,完成本关任务。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:10
预期输出:
递归算法求得10! = 3628800
循环算法求得10! = 3628800
参考答案
#include <stdio.h>
int s=1;
float fac_recursion(int n)
{/********** Begin **********/
if(n==1)
return 1;
else
return n*fac_recursion(n-1);/********** End **********/
}float fac_loop(int n)
{/********** Begin **********/
for(int i=n;i>=1;i--){
s*=i;
}
return s;/********** End **********/
}void main()
{int n;float y;scanf("%d",&n);y=fac_recursion(n);printf("递归算法求得%d! = %.0f \n",n,y);y=fac_loop(n);printf("循环算法求得%d! = %.0f \n",n,y);
}
第4关:求斐波那契额数列的前10项
任务描述
本关任务:用循环和递归算法求斐波那契额数列的前 10 项。
编程要求
请在右侧编辑器Begin-End处补充代码,完成本关任务。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:10
预期输出:
递归算法求的前10项为: 1 1 2 3 5 8 13 21 34 55
循环算法求的前10项为: 1 1 2 3 5 8 13 21 34 55
参考答案
#include <stdio.h>
int fibo_recur(int n)
{/********** Begin **********/if(n==1||n==2)return 1;elsereturn fibo_recur(n-1)+fibo_recur(n-2);/********** End **********/
}int fibo_loop(int n)
{/********** Begin **********/int a=1,b=1,c;if(n<=2)return a;else{for(int i=3;i<=n;i++){c=a+b;a=b;b=c;}return c;}/********** End **********/
}void main()
{int n,y,i;scanf("%d",&n);printf("递归算法求的前10项为:");for(i=1; i<=n; i++){y=fibo_recur(i);printf("%3d",y);}printf("\n循环算法求的前10项为:");for(i=1; i<=n; i++){y=fibo_loop(i);printf("%3d",y);}
}