EduCoder-程序设计技术R-函数-(第1关:求和)(第2关:回文数计算)(第3关: 编写函数求表达式的值)(第4关:阶乘数列)(第5关:亲密数)(第6关:公约公倍数)

第1关:求和

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

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

输入
输入一个n

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

测试说明
样例输入:
100
样例输出:
5050

开始你的任务吧,祝你成功!

代码示例

#include"stdio.h"
void he(long long n)
{
	long long i,sum=0;
	for(i=1;i<=n;i++)
	sum+=i;
	printf("%lld",sum);
}
int main()
{
	long long n;
	scanf("%lld",&n);
	he(n);
}

第2关:回文数计算

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

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

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

202
212
222
232
242

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

开始你的任务吧,祝你成功!

代码示例

#include"stdio.h" 
	int isPalindrome(int x) {
        if (x < 0 || (x > 0 && x % 10 == 0)) return 0;
        int back = 0;
        while (x > back) {
            back = back * 10 + x % 10;
            x = x / 10;
        }
        return (x == back) || (x == back / 10);
    }
int main()
{
	int a,i;
for(i=200;i<=3000;i++)
if(isPalindrome(i)!=0)
	printf("%d\n",i);
}

第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" 
double fun(int n)
{ 
	double s, t; int i;
	s=1.0; t=1.0;
	for(i=1;i<=n;i++)//这里应该是i++
	{ 
		t=t*i/(2*i+1);
		s+=t;
	}
	return s;
}
int main(int argc, char *argv[])
{
    int x;
    scanf("%d",&x);
	printf("%12.10lf", fun(x));
	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>
int main()
{
	int a,b,x;
	scanf("%d",&x);
	long long jiecheng=1, sum=0;
	for (a=1;a<=x;a++)  //因为有30项
	{
		for (b = 1;b <= a;b++)//分别求各项的阶乘
		{
			jiecheng*= b;
		}
		sum+=jiecheng;//相加
		jiecheng = 1;//因为前面的变量jiecheng有上一项的值,所以重置为一,以接下来算下一项
	}
	printf("%lld",sum);//以科学计数法输出,保留2位小数
}

第5关:亲密数

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

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

测试说明
样例输出:
(220,284)(1184,1210)(2620,2924)

提示:

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

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

开始你的任务吧,祝你成功!

代码示例

#include <stdio.h>
int main()
{
    int a, i, b, n;
    for (a = 1; a < 3000; a++)
    {   
        for (b = 0, i = 1; i <= a / 2; i++ )
        {
            if(! (a % i)) 
                b += i; 
        }
        for (n = 0, i = 1; i <= b/2; i++)
        {
            if(! (b % i)) 
                n += i;
        }
        if(n == a && a < b)
            printf("(%d,%d)", a, b); 
    }   
    return 0;
}

第6关:公约公倍数

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

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

测试说明
样例输入:

6 15

样例输出:

3 30
提示:

负数没有最大公约数和最小公倍数;
最大公约数和最小公倍数一定为正数,不可以为负数;
需要考虑代码运行效率,否则会评测超时。
开始你的任务吧,祝你成功!

代码示例

#include<stdio.h>
int main()
{
	long x, y, z, m, n;
	scanf("%ld%ld", &x, &y);
	m = x, n = y;
if(x>0&&y>0)
{
	while (y != 0)
	{
		z = x%y;
		x = y;
		y = z;
	}
	printf("%ld ", x);
	printf("%ld", m*n / x);}
	else
	printf("Input Error");
}
  • 11
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值