6-8 实验6_1_递归求值一
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
现有函数f(n),n为大于等于0的整数。当n等于0时f(n) = 0,当n大于0时 f(n)=f(n-1) +n3
注意:此题要求用递归求解,且不允许使用全局变量,否则没有分。
函数接口定义:
int fuc(int n) ;
其中 n
是用户传入的参数。 n
的值不超过200
。函数的返回值为对应的f(n)的计算结果。
裁判测试程序样例:
#include<stdio.h> int fuc(int n) ; int main() { int n ; scanf("%d",&n); printf("%d\n",fuc(n)); return 0 ; } /* 请在这里填写答案 */
输入样例:
2
输出样例:
9
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int fuc(int n)
{
int res;
if(n == 0)
{
res = 0;
}
else
{
res = fuc(n-1) + n*n*n;
}
return res;
}
6-9 实验6_2_递归求值二
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
现有序列: s = a + a + 3 + a + 6 +…+ a + 3 X n
请写出递归求s的程序。
输入只有一行,为两个用空格分隔正整数,分别代表n(0<n) 和 a(1<a)
输出也只有一行,为此情况下s的值。(测试用例保证所有整数可以用 int存储)。
注意:此题要求递归求解,且不允许使用全局变量,其他方式不得分。
函数接口定义:
int getSum(int n , int a) ;
其中 n
和 a
都是用户传入的参数。 函数须计算结果。
裁判测试程序样例:
#include <stdio.h> int getSum(int n , int a) ; int main() { int n , a ; scanf( "%d%d" , &n , &a ); printf( "%d\n" , getSum( n , a ) ); return 0; } /* 请在这里填写答案 */
输入样例:
1 2
输出样例:
7
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int getSum(int n , int a)
{
int s;
if(n==1)
{
s = a + a + 3;
}
else if(n>1)
{
s = getSum(n-1,a) + a + 3*n;
}
return s;
}
6-10 实验6_3_递归求最大值
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
写一个函数可以读入n(0<n<100)个整数,并求出这n个整数中的最大值。
此题要求递归求解,且不允许使用全局变量。在此题的所有提交中只要出现非递归提交,无论其他提交是否是递归求解此题均为0分。
函数接口定义:
int findMax(int n) ;
其中 n
是用户传入的参数。 n
的值大于0且小于100; 函数须返回 读入的n个整数中最大的那个数。
裁判测试程序样例:
#include <stdio.h> int findMax(int n) ; int main() { int n ; scanf("%d", &n); printf("%d\n" , findMax( n ) ) ; return 0; } /* 请在这里填写答案 */
输入样例:
6
15 30 34 10 89 5
输出样例:
89
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int findMax(int n)
{
int x;
scanf("%d", &x);
if(n==1)
{
return x;
}
else if(n>1)
{
int max = findMax(n-1);
return max>x?max:x;
}
}
6-11 实验6_4_二进制转十进制
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
设计递归函数int convert(int n);用于将二进制数n转换为十进制数并返回。
递归函数设计思路与提示:
如将1101转换为十进制的形式:
1101=1 * 20 + 0 * 21 + 1 * 22 + 1 * 23 = 1101 % 10 + convert(110) * 2 ;
110 = 0 * 20 + 1 * 21 + 1 * 22 = 110 % 10 + convert(11) * 2;
11 = 1 * 20 + 1 * 21 = 11 % 10 + convert(1) * 2 ;
convert(1) = 1 ;
所以得到以下结论:当n==0或n==1时,函数返回n,否则返回n%10+convert(n/10)*2 。
输入与输出要求:
输入一个整数n,代表二进制数,其长度不大于10。输出转换后的十进制数,占一行。
注意:此题要求递归求解,且不允许使用全局变量,其他方式不得分。
函数接口定义:
int convert(int n);
其中 n
是用户传入的参数。 n
的长度不大于10;函数的返回值为转换后的十进制数。
裁判测试程序样例:
#include<stdio.h>
int convert(int n);
int main()
{
int n ;
scanf("%d",&n);
printf("%d\n",convert(n)) ;
return 0 ;
}
/* 请在这里填写答案 */
输入样例:
101010
输出样例:
42
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int convert(int n)
{
int res;
if(n==1||n==0)
{
res = n;
}
else
{
res = n%10 + convert(n/10)*2;
}
return res;
}
6-12 实验6_5_二进制的位数
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
设计递归函数int countBinary(int n); 用于将非负十进制整数n转换成二进制形式,并返回该二进制数的位数。如十进制数13的二进制形式为1101,位数为4,那么调用countBinary(13)的结果为4。
要求同学们先写出该问题的递归定义式,再设计递归函数。
输入与输出要求:
输入一个非负整数n。输出求得的结果,如输入“13”,输出“4”,占一行。
注意:此题要求递归求解,且不允许使用全局变量,其他方式不得分。
函数接口定义:
int countBinary(int n);
其中 n
是用户传入的参数。 n
的值不超过int
的范围。函数的返回值为 n
的二进制形式的位数。
裁判测试程序样例:
#include<stdio.h>
int countBinary(int);
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",countBinary(n));
return 0 ;
}
/* 请在这里填写答案 */
输入样例:
13
输出样例:
4
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int countBinary(int n)
{
int count = 0;
if(n==1||n==0)
{
return 1;
}
else
{
return 1 + countBinary(n/2);
}
}
6-13 实验6_6_数列求值
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
现有序列: s = 1 + a + a2 +…+ an+1
其中a>0,n>0,且均为整数。 测试用例保证所有整数可以用int存储。
请写出递归求s的函数。
注意:此题要求递归求解,且不允许使用全局变量,其他方式不得分。
函数接口定义:
int evaluation(int n,int a);
其中 n
和 a
都是用户传入的参数,分别代表数列中的n和a,返回值为所求结果。
裁判测试程序样例:
#include <stdio.h>
int evaluation(int n,int a) ;
int main()
{
int n , a ;
scanf("%d%d",&n,&a);
printf("%d\n",evaluation(n,a));
return 0;
}
/* 请在这里填写答案 */
输入样例:
1 2
输出样例:
7
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <math.h>
int evaluation(int n, int a)
{
if(n==1)
{
return 1+a+a*a;
}
else{
return evaluation(n-1,a)+(int)pow(a,n+1);
}
}
6-14 实验6_7_最大公约数
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
设计递归函数int GCD(int a,int b);计算正整数a和b的最大公约数并返回。如GCD(32,48)为16。
GCD(a,b)递归定义为:
GCD(a,b)=GCD(b,a MOD b) 当 a MOD b≠0
GCD(a,b)=b 当 a MOD b=0
输入与输出要求:
输入两个正整数a和b,输出两数的最大公约数,占一行。
注意:此题要求递归求解,且不允许使用全局变量,其他方式不得分。
函数接口定义:
int GCD(int a , int b );
其中 a
和 b
都是用户传入的参数。a
和 b
的值不超过int
的范围。函数的返回值为a
和 b
的最大公约数。
裁判测试程序样例:
#include<stdio.h>
int GCD(int a , int b );
int main()
{
int a , b ;
scanf("%d%d", &a , &b );
printf( "%d\n" , GCD( a, b ) ) ;
return 0 ;
}
/* 请在这里填写答案 */
输入样例:
32 48
输出样例:
16
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int GCD(int a, int b)
{
if(a%b==0)
{
return b;
}
else{
return GCD(b,a%b);
}
}
6-15 实验6_8_整数逆序输出
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
请写出将一个整数逆序输出的函数。
注意:此题要求递归求解且不允许使用数组,不允许使用全局变量。如果违反要求则没有分。
函数接口定义:
void reverse(int n) ;
其中 n
是用户传入的参数。 n
的值大于0且不超过int
的范围; 函数的返回值为空,其功能是逆序输出 n
。测试用例保证输入的n
末尾不为0。
裁判测试程序样例:
#include <stdio.h>
void reverse(int n) ;
int main()
{
int n;
scanf("%d",&n);
reverse(n) ;
printf("\n");
return 0;
}
/* 请在这里填写答案 */
输入样例:
1234
输出样例:
4321
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
void reverse(int n)
{
if(n/10==0){
printf("%d", n);
}
else{
printf("%d", n%10);
reverse(n/10);
}
}
6-16 实验6_9_素数分解
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
设计递归函数void void printFactor( int, int );打印出对n进行素数分解的结果。
当执行void printFactor(60,1)时,打印效果为:
60=2*2*3*5。
关于素数分解的描述,见讲义。
设计程序,已知一段数据范围[a,b],且a<=b,要求对其中的每一个数进行素数分解。你也可以设计其它辅助函数,如判断素数的函数isPrime(n)。
输入与输出要求:
输入两个正整数a、b,代表所分解的区间,满足1<=a<=b<=100000,且b-a<=100。输出b-a+1行,即b-a+1个数的分解。
注意:此题要求递归求解,且不允许使用全局变量,其他方式不得分。
函数接口定义:
void printFactor( int, int );
其中第一个参数为待分解的整数,第二个参数需自行设计。函数无返回值。
裁判测试程序样例:
#include<stdio.h>
void printFactor( int, int );
int main()
{
int a,b,i ;
scanf( "%d%d", &a, &b );
for( i = a ; i <= b ; i++ )
printFactor( i , 1 ) ;
return 0;
}
/* 请在这里填写答案 */
输入样例:
100 105
输出样例:
100=2*2*5*5
101=101
102=2*3*17
103=103
104=2*2*2*13
105=3*5*7
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
void printFactor(int x, int y)
{
if (y == 1)
{
if (x == 1)
printf("%d=%d\n", x, x);
else
printf("%d=", x);
}
else if (x == 1)
{
printf("\n");
return;
}
int i;
for(i=2; i <= x; i++)
{
if (x % i == 0)
{
if (y == 1)
printf("%d", i);
else
printf("*%d", i);
return printFactor(x / i, 2);
}
}
}