代码编织梦想

第1关:求和

任务描述

题目描述:给你一个n,要求你编写一个函数求1+2+.......+n.

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。

输入 输入一个n

输出 输出1+2+.......+n的和

测试说明

样例输入: 100

样例输出: 5050

代码如下 


#include<stdio.h>

//编写函数

/*********Begin*********/

int sum(int n)

{

if(n==0)

    return 0;

    else

    return n + sum(n - 1);

}

/*********End**********/

int main(void)

{  

    /*********Begin*********/

    int n;

    scanf("%d",&n);

    printf("%d\n",sum(n));

    /*********End**********/

    return 0;

}


第2关:回文数计算

任务描述

本关任务:编写函数求区间[200,3000]中所有的回文数,回文数是正读和反读都是一样的数。如525, 1551

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入 无需输入

输出 输出区间[200,3000]中所有的回文数,一行一个回文数,不需要输出其它无关的字符。

202 212 222 232 242 .....

测试说明

平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。

代码如下 


#include <stdio.h>

void solve() {

    /*********Begin*********/

    int i,a,b,c,d;

    for(i=200; i<=3000; i++) {

        a=i/1000;  

        b=(i-a*1000)/100;  

        c=((i-a*1000)-b*100)/10;

        d=i%10;

        if(i<1000 && b==d)

            printf("%d\n",i);

        if( i>=1000 && a==d && b==c)

            printf("%d\n",i);

    }

    /*********End**********/

}

int main(void)

{

    solve();

    return 0;

}


第3关: 编写函数求表达式的值

任务描述

题目描述:有如下表达式 s = 1 + 1 / 3 + (1 * 2) / (3 * 5) + (1 * 2 * 3) / (3 * 5 * 7) + .... + (1 * 2 * 3 * .... * n) / (3 * 5 * 7 * ... * (2 * n + 1))

编写函数求给出的n所对应的表达式s的值。

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入

一个整数n 输出

输出表达式的值,保留小数点后10位的值。

测试说明

样例输入:4

样例输出:1.5492063492

 代码如下


#include "stdio.h"

/*********Begin*********/

int function(int n);

int function(int n) {

    double a=1,b=1,i;

    double s=0;

    for(i=0; i<=n; i++)

    {

        if(i==0 || i==1) a=1;

        else a=a*i;

        b=b*(2*i+1);

        s+=(double)a/b;

    }

    printf("%.10lf\n",s);

}

/*********End**********/

int main(void) {

    /*********Begin*********/

    int n;

    scanf("%d",&n);

    function(n);

    /*********End**********/

    return 0;

}


第4关:阶乘数列

任务描述

题目描述:求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入

一个整数n(1<=n<=20) 输出 输出表达式的值,占一行。

测试说明

样例输入:5

样例输出:153

提示:

int可能会溢出,需要用能表示更大范围的long long int

(注:VC6.0不支持此类型,VC下使用可使用__int64替代)

代码如下 


#include <stdio.h>

long long int fact (int n)

{

    /*********** begin *************/

    if(n==1)

    return 1;

    else

    return n*fact(n-1);

    /************ end **************/  

    return 0;

}

long long int factsum (int n)

{

    /*********** begin *************/

    if(n==1)

    return fact(1);

    else

    return fact(n)+factsum(n-1);

    /************ end **************/  

    return 0;

}

int main ()

{

    int n ;

    scanf("%d",&n);

   long long int sum;

    sum = factsum(n);

    printf("%lld", sum);

    return 0;

}


第5关:亲密数

任务描述

题目描述:两个不同的自然数AB,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数AB称为亲密数。求3000以内的全部亲密数。

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入 无需输入 输出 3000以内的全部亲密数(输出格式:(A,B),不加换行,不加分隔符号) 一对亲密数只输出一次,小的在前

测试说明

样例输出: (220,284)(1184,1210)(2620,2924)

提示:

按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,再计算b的全部因子的累加和为n,若n等于a则可判定ab是亲密数。计算数a的各因子的算法:

用a依次对i(i=1~a/2)进行模运算,若模运算结果等于0,则ia的一个因子;否则i就不是a的因子。

代码如下 


#include<stdio.h>

void solve()

{

/*********Begin*********/

    int a,b,sum,i;

    for(a=1;a<=3000;a++)

    {

        b=0;sum=0;

        for(i=1;i<a;i++)

        if(a%i==0)

        b+=i;

        for(i=1;i<b;i++)

        if(b%i==0)

        sum+=i;

        if(sum==a&&a<b)

        printf("(%d,%d)",a,b);

    }

    /*********End**********/

}

int main(void)

{  

    solve();

    return 0;

}


第6关:公约公倍数

任务描述

题目描述:写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,变量类型使用long long int输入 两个正整数 输出 最大公约数 最小公倍数 如果输入的数中包含负数,则输出Input Error

测试说明

样例输入:6 15

样例输出:3 30

提示:

  • 负数没有最大公约数和最小公倍数;
  • 最大公约数和最小公倍数一定为正数,不可以为负数;
  • 需要考虑代码运行效率,否则会评测超时。

 

代码如下


#include<stdio.h>

//编写最大公约数GCD函数

/*********Begin*********/

long long int gcd(int a, int b)

{

    if( b == 0 )

        return a;

    else

        return gcd(b,a%b);

}

/*********End**********/

//编写最小公倍数LCM函数

/*********Begin*********/

long long int lcm(int a, int b)

{

    return a / gcd(a, b)*b;

}

/*********End**********/

int main(void)

{  

    /*********Begin*********/

    long long int x, y;

    scanf("%d %d", &x, &y);

    if( gcd(x,y)<0||lcm(x,y)<0)

    {

        printf("Input Error");

        return 0;  

    }

    else

    {

        printf("%lld ", gcd(x,y));

        printf("%lld", lcm(x,y));

    }

    /*********End**********/

    return 0;

}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zfl0529/article/details/131027807