XDU-OJ-C语言-Test 2

XDU-OJ-C语言-Test 2,第1张

XDU-OJ-C语言-Test 2
033:递归数列

类别:函数与递归

程序类型:代码片段

时间限制:2S

内存限制:10000Kb

问题描述    

一个数列A定义如下

A(1)=1,

A(2)=1/(1+A(1)),

A(3)=1/(1+A(2)),

……

A(n)=1/(1+A(n-1))。

定义一个函数function用来计算数列的第第n项的值,函数声明如下:

double function(int n);

输入说明:  

输入为1个正整数n,n<=10。

输出说明    

函数输出数列A第n项的值,结果小数点后保留6位有效数字,多余部分四舍五入。

输入样例    

5

输出样例    

0.625000

提示  

所有浮点数使用双精度浮点来运算!!!

#include 

double function(int n)
{
    if (n==1)
        return 1;
    return 1/(1+function(n-1));
}

int main(void)
{
    int n;
    scanf("%d",&n);
    printf("%.6f",function(n));

    return 0;
}
034:水仙花数

类别
流程控制

时间限制    
2S

内存限制    
10000Kb

问题描述    
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)。
定义一个函数int function(int a, int b),计算区间[a,b]或区间[b,a]上水仙花数的个数。

输入说明    
输入由两个整数a和b构成,a和b之间用空格分隔。0

输出说明    
输出区间[a,b]或区间[b,a]上水仙花数的个数。

输入样例    
3  1000  

输出样例    
4

提示    
a,b的位数n可能小于3

#include 
#include 

int function(int a,int b)
{
    int max=a,min=b;
    int count=0;
    if (b>a)
    {
        max=b;
        min=a;
    }
    if (min<100)
        min=100;
    for (int i=min;i<=max;i++)
    {
        int sum=0;
        int wei=0;
        for (int j=1;j<=i*10;j=j*10)
        {
            if (i/j!=0)
            {
                wei=wei+1;
            }
        }
        int k=1;
        while (i/k!=0)
        {
            sum=sum+(int)pow((i/k)%10,wei);
            k=k*10;
        }
        if (sum==i)
            count=count+1;
    }

    return count;
}

int main(void)
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d",function(a,b));
    return 0;
}
035:歌德巴赫猜想

类别:函数与递归

时间限制:2S

内存限制:10000Kb

问题描述:
德巴赫猜想:
任意一个大偶数都能分解为两个素数的和,
对与输入的一个正偶数,写一个程序来验证歌德巴赫猜想。
由于每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,按从小到大顺序输出。

输入说明    
输入一个正偶数n,1

输出说明    
输出分解出的两个最小和最大素数。

输入样例    
10

输出样例    
3 7

 

#include 

int function(int n)
{
    for (int i=2;i<=n;i++)
    {
        int tempa=0,tempb=0;
        for (int j=2;j<=i;j++)
        {    
            if (i%j==0)
            {
                tempa=tempa+1;
            }
            if (tempa>1)
                break;
        }
        for (int k=2;k<=n-i;k++)
        {
            if ((n-i)%k==0)
            {
                tempb=tempb+1;
            }
            if (tempa>1)
                break;
        }
        if (tempa==1 && tempb==1)
        {   
            return i;
            break;
        }
    }
}

int main(void)
{
    int n;
    scanf("%d",&n);
    printf("%d %d",function(n),n-function(n));
    return 0;
}
 044:斐波纳契数列

类别:函数与递归
时间限制:2S

内存限制:256Kb

问题描述    
已知一个斐波纳契数列中的数字依次为1, 1, 2, 3, 5, 8, 13, 21, 34, 55 … 。请判断该数列中第n个数字(n从1开始计数)是不是素数。

输入说明    
输入一个整数n(1

输出说明    
判断斐波纳契数列中的第n个数字是不是素数,如果是输出yes,否则输出该数字。

输入样例
样例1输入    
6
样例2输入
4

输出样例    
样例1输出
8
样例2输出
yes

#include 

int funaction(int n)
{
    if (n==1 || n==2)
        return 1; 
    return funaction(n-1)+funaction(n-2);
}
int shushu(int n)
{
    int tar=0;
    for (int i=1;i 
055:数列求和

类别
函数与递归

时间限制    
1S

内存限制    
1000Kb

问题描述    
有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13,......An/Bn
A1=2,A2=3,An=An-1+An-2;
B1=1,B2=2,Bn=Bn-1+Bn-2。
求出这个数列的前n(2<=n<=30)项之和。

输入说明    
一个整数n

输出说明    
输出一个实数表示数列前n项之和,结果保留2位小数(四舍五入)

输入样例    
2
输出样例    
3.50

#include 

int funactionA(int n)
{
    if (n==1)
        return 2;
    if (n==2)
        return 3;
    return funactionA(n-1)+funactionA(n-2);
}

int funactionB(int n)
{
    if (n==1)
        return 1;
    if (n==2)
        return 2;
    return funactionB(n-1)+funactionB(n-2);
}

double funactionSUM(int n)
{
    double sum=0.0;
    for (int i=1;i<=n;i++)
        sum=sum+(double)funactionA(i)/funactionB(i);
    return sum;
}

int main(void)
{
    int n;
    scanf("%d",&n);
    printf("%.2f",funactionSUM(n));
    return 0;
}
057:Fibonacci数列

类别:函数与递归

时间限制:2S

内存限制:1000Kb

问题描述:
有一种形式的Fibonacci数列定义如下:
F(0)=7 
F(1)=11
F(n)=F(n-1)+F(n-2)(n>=2)

按以下声明写一个函数fib
int fib(int n);
fib函数用来计算参数n对应的F(n)。
fib(n)的返回值是F(n)

输入说明    
函数参数为一个整数n(0<=n<40)。

输出说明    
函数返回值为整数,表示n对应的F(n)值。

输入样例    
2

输出样例    
18

#include 

int fib(int n)
{
    if (n==0)
        return 7;
    else if (n==1)
        return 11;
    return fib(n-1)+fib(n-2);
}

int main(void)
{
    int n;
    scanf("%d",&n);
    printf("%d",fib(n));
    return 0;
}
 065:数字处理

类别:函数与递归

时间限制:2S

内存限制:1000Kb

问题描述    
编写一个程序,从键盘输入一个非零整数n(0 < n <= 1000000000),对整数n进行如下处理:
将整数的各位数字取出来相加,如果结果是一位数则输出该数,否则重复上述过程,直到得到的结果为一位数,并输出该结果。
例如:n=456,变换过程如下
4+5+6=15
1+5=6
输出结果为6

输入说明    
一个非零整数n。

输出说明    
输出整数n的处理结果。

输入样例    
456

输出样例    
6

#include 

int fun(int n)
{
    int sum=0;
    int k=1;
    while (n/k!=0)
    {
        sum=sum+(n/k)%10;
        k=k*10;
    }
    if (sum<10)
        return sum;
    else 
        return fun(sum);
}

int main(void)
{
    int n;
    scanf("%d",&n);
    printf("%d",fun(n));
    return 0;
}
159:阶乘运算

描述:编写P(m,n)=m!/n!/(m-n)!,(m>n)。求出P(8,6)和P(5,2)的值。

时间限制:1s    

内存限制:10000    

类别:1

输入说明
输入两个整数(m>n),如8 6    

输出说明
输出保留2位小数    

输入样例
8 6

输出样例
28.00

提示
采用for循环结构,数据类型为单精度浮点型,输出保留两位小数,格式%.2f。
编写阶乘计算函数Mul(),主函数调用

#include 

int Mul(int n)
{
    if (n==0)
        return 1;
    int temp=1;
    for (int i=1;i<=n;i++)
        temp=temp*i;
    return temp;
}

double P(int m,int n)
{
    int max=m,min=n;
    if (n>m)
    {
        max=n;
        min=m;
    }
    double p=(double)Mul(max)/(double)Mul(min)/(double)Mul(max-min);
    return p;
}

int main(void)
{
    int m=0,n=0;
    scanf("%d %d",&m,&n);
    printf("%.2f",P(m,n));
    return 0;
}
215:字符逆序排放

时间限制:1S

内存限制:10000Kb

问题描述:

写一个函数,使输入的字符按照反序排放,在主函数中输入和输出字符。

输入说明:

输入一个字符串。

输出说明:

输出上述字符串的逆序排列。

输入样例:

animal

输出样例:

lamina

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5594466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存