天梯初级练习题目 6-1 ~ 6-10 含全部测试点

6-1 递归求简单交错幂级数的部分和 分数 15

本题要求实现一个函数,计算下列简单交错幂级数的部分和:

f(x,n)=x−x2+x3−x4+⋯+(−1)n−1xn

函数接口定义:

double fn( double x, int n );

其中题目保证传入的n是正整数,并且输入输出都在双精度范围内。函数fn应返回上述级数的部分和。建议尝试用递归实现。

裁判测试程序样例:

#include <stdio.h>

double fn( double x, int n );

int main()
{
    double x;
    int n;
    
    scanf("%lf %d", &x, &n);
    printf("%.2f\n", fn(x,n));
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

0.5 12

输出样例:

0.33

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

double fn(double x, int n)
{
    if(n == 1) return x;
    return (n % 2 ? 1 : -1) * pow(x, n) + fn(x, n - 1);
}

6-2 简单实现x的n次方 分数 10

本题要求实现一个计算xn(n≥0)的函数。

函数接口定义:

double mypow( double x, int n );

函数mypow应返回xn次幂的值。题目保证结果在双精度范围内。

裁判测试程序样例:

#include <stdio.h>

double mypow( double x, int n );

int main()
{
    double x;
    int n;

    scanf("%lf %d", &x, &n);
    printf("%f\n", mypow(x, n));

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

0.24 4

输出样例:

0.003318

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

double mypow(double x, int n)
{
    if(!n) return 1;
    return x * mypow(x, n - 1);
}

6-3 使用函数求1到10的阶乘和

分数 10

本题要求实现一个计算非负整数阶乘的简单函数,使得可以利用该函数,计算1!+2!+⋯+10!的值。

函数接口定义:

double fact( int n );

其中n是用户传入的参数,其值不超过10。如果n是非负整数,则该函数必须返回n的阶乘。

裁判测试程序样例:

#include <stdio.h>

double fact( int n );

int main(void)
{    
    int i;
    double sum; 

    sum = 0; 
    for(i = 1; i <= 10; i++) 
        sum = sum + fact(i); 
        
    printf("1!+2!+...+10! = %f\n", sum); 
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

本题没有输入。

输出样例:

1!+2!+...+10! = 4037913.000000

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

int st[100010];
double fact(int n)
{
    if(!n) return 1;
    return fact(n - 1) * n;
}

6-4 使用函数计算两点间的距离 分数 10

本题要求实现一个函数,对给定平面任意两点坐标(x1​,y1​)和(x2​,y2​),求这两点之间的距离。

函数接口定义:

double dist( double x1, double y1, double x2, double y2 );

其中用户传入的参数为平面上两个点的坐标(x1y1)和(x2y2),函数dist应返回两点间的距离。

裁判测试程序样例:

#include <stdio.h>
#include <math.h>

double dist( double x1, double y1, double x2, double y2 );

int main()
{    
    double x1, y1, x2, y2;

    scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
    printf("dist = %.2f\n", dist(x1, y1, x2, y2));
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

10 10 200 100

输出样例:

dist = 210.24

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

double dist(double x1, double y1, double x, double y)
{
    double dx = x1 - x, dy = y1 - y;
    return sqrt(dx * dx + dy * dy);
}

6-5 符号函数 分数 10

本题要求实现符号函数sign(x)。

函数接口定义:

int sign( int x );

其中x是用户传入的整型参数。符号函数的定义为:若x大于0,sign(x) = 1;若x等于0,sign(x) = 0;否则,sign(x) = −1。

裁判测试程序样例:

#include <stdio.h>

int sign( int x );

int main()
{
    int x;

    scanf("%d", &x);
    printf("sign(%d) = %d\n", x, sign(x));
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

10

输出样例:

sign(10) = 1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

int sign(int x)
{
    return x ? x > 0 ? 1 : -1 : 0;
}

6-6 使用函数判断完全平方数 分数 10

本题要求实现一个判断整数是否为完全平方数的简单函数。

函数接口定义:

int IsSquare( int n );

其中n是用户传入的参数,在长整型范围内。如果n是完全平方数,则函数IsSquare必须返回1,否则返回0。

裁判测试程序样例:

#include <stdio.h>
#include <math.h>

int IsSquare( int n );

int main()
{
    int n;
    
    scanf("%d", &n);
    if ( IsSquare(n) ) printf("YES\n");
    else printf("NO\n");
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

90

输出样例1:

NO

输入样例2:

100

输出样例2:

YES

鸣谢安阳师范学院段晓云老师、用户黄凯涵修正数据~

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

int IsSquare(int n)
{
    return (int)sqrt(n) * (int)sqrt(n) == n;
}

6-7 使用函数求素数和 分数 20

本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。

素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。

函数接口定义:

int prime( int p ); int PrimeSum( int m, int n );

其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数PrimeSum返回区间[mn]内所有素数的和。题目保证用户传入的参数mn

裁判测试程序样例:

#include <stdio.h>
#include <math.h>

int prime( int p );
int PrimeSum( int m, int n );
    
int main()
{
    int m, n, p;

    scanf("%d %d", &m, &n);
    printf("Sum of ( ");
    for( p=m; p<=n; p++ ) {
        if( prime(p) != 0 )
            printf("%d ", p);
    }
    printf(") = %d\n", PrimeSum(m, n));

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

-1 10

输出样例:

Sum of ( 2 3 5 7 ) = 17

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

int prime(int p)
{
    if(p <= 1) return 0;
    for(int i = 2; i <= p / i; ++ i)
        if(p % i == 0) return 0;
    return 1;
}

int PrimeSum(int m, int n)
{
    int res = 0;
    for(int i = m; i <= n; ++ i)
        if(prime(i)) res += i;
    return res;
}

6-8 数字金字塔 分数 15

本题要求实现函数输出n行数字金字塔。

函数接口定义:

void pyramid( int n );

其中n是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行数字金字塔。注

意每个数字后面跟一个空格。

裁判测试程序样例:

#include <stdio.h>

void pyramid( int n );

int main()
{    
    int n;

    scanf("%d", &n);
    pyramid(n);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

5

输出样例:

    1 
   2 2 
  3 3 3 
 4 4 4 4 
5 5 5 5 5 

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

void pyramid(int n)
{
    for(int i = 1; i <= n; ++ i)
    {
        for(int j = 1; j <= n - i; ++ j) putchar(' ');
        for(int j = 1; j <= i; ++ j) printf("%d ", i);
        putchar('\n');
    }
}

6-9 使用函数计算两个复数之积 分数 10

若两个复数分别为:c1​=x1​+y1​i和c2​=x2​+y2​i,则它们的乘积为 c1​×c2​=(x1​x2​−y1​y2​)+(x1​y2​+x2​y1​)i。

本题要求实现一个函数计算两个复数之积。

函数接口定义:

double result_real, result_imag; void complex_prod( double x1, double y1, double x2, double y2 );

其中用户传入的参数为两个复数x1+y1i和x2+y2i;函数complex_prod应将计算结果的实部存放在全局变量result_real中、虚部存放在全局变量result_imag中。

裁判测试程序样例:

#include<stdio.h> 

double result_real, result_imag;
void complex_prod( double x1, double y1, double x2, double y2 );

int main(void) 
{ 
    double imag1, imag2, real1, real2;    

    scanf("%lf %lf", &real1, &imag1);             
    scanf("%lf %lf", &real2, &imag2);             
    complex_prod(real1, imag1, real2, imag2);     
    printf("product of complex is (%f)+(%f)i\n", result_real, result_imag);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1 2
-2 -3

输出样例:

product of complex is (4.000000)+(-7.000000)i

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

void complex_prod(double x1, double y1, double x, double y)
{
    result_real = x1 * x - y1 * y;
    result_imag = x1 * y + x * y1;
}

6-10 使用函数求最大公约数 分数 10

本题要求实现一个计算两个数的最大公约数的简单函数。

函数接口定义:

int gcd( int x, int y );

其中xy是两个正整数,函数gcd应返回这两个数的最大公约数。

裁判测试程序样例:

#include <stdio.h>

int gcd( int x, int y );

int main()
{
    int x, y;
    
    scanf("%d %d", &x, &y);
    printf("%d\n", gcd(x, y));
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

32 72

输出样例:

8

感谢集美大学蓝华斌同学修正测试数据!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

int gcd(int x, int y)
{
    return y ? gcd(y, x % y) : x;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值