当前位置: 首页 > news >正文

牛客网刷题 | BC85 牛牛学数列3

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

牛牛准备继续进阶,计算更难的数列

输入一个整数n,计算 1+1/(1-3)+1/(1-3+5)+...+1/(1-3+5-...((-1)^(n-1))*(2n-1))的值

输入描述:

输入一个整数

输出描述:

输出一个浮点数,保留3位小数


题目解析 :

数列的公式是:

1+1/(1-3)+1/(1-3+5)+...+1/(1-3+5-...((-1)^(n-1))*(2n-1))

这个数列的每一项可以看作是一个分数,分子是1,分母是一个由奇数构成的序列,奇数的符号取决于项的位置是奇数还是偶数。具体来说:

  • 当项的位置是奇数时,分母是正的奇数。
  • 当项的位置是偶数时,分母是负的奇数。

因此,第k项可以表示为:


代码 1  : 

别被难住了,分母看上去很长的样子,但如果我们仔细看,就会发现是 1-1/2+1/3这样,既然如此那代码就很简单了。

#include<stdio.h>
#include<math.h>
int main()
{int i = 0;double sum = 0;double q = 2.0;scanf("%d",&i);for(double j = 1;j<=i;j++){if(fmod(j, q) !=0){sum += (1/j);}elsesum -= (1/j);}printf("%.3lf\n",sum);return 0;
}

代码 2 :

//仔细观察不难发现分母其实是有规律的,我们不妨设一个变量来表示不断变化的分母
#include<stdio.h>
int main()
{int n,denominator=0,i;float sum=0;scanf("%d",&n);for (i=1;i<=n;i++){i%2==0?(denominator-=2*i-1):(denominator+=2*i-1);sum+=1.0/denominator;}printf("%.3f\n",sum);return 0;
}

代码 3 :

#include <stdio.h>// 函数用于计算数列的第k项
double sequence_term(int k) {// 根据k的奇偶性,交替使用正负号double sign = (k % 2 == 0) ? 1 : -1;// 计算第k项的分母,即(2k-1)double denominator = sign * (2 * k - 1);// 返回第k项的值,分子是1return 1.0 / denominator;
}// 函数用于计算数列的和
double calculate_sequence_sum(int n) {double sum = 0.0; // 用于累加数列的和for (int k = 1; k <= n; ++k) {// 计算第k项,并累加到总和中sum += sequence_term(k);}return sum;
}int main() {int n;// 读取用户输入的整数nprintf("请输入一个整数n:");scanf("%d", &n);// 计算数列的和double sum = calculate_sequence_sum(n);// 输出结果,保留三位小数printf("数列的和为:%.3f\n", sum);return 0; // 程序结束
}

代码 4 :

#include<stdio.h> // 引入标准输入输出库
#include<math.h>  // 引入数学库,这里实际上不需要math.hint main() {int i = 0; // 声明一个整型变量i,用于存储项数double sum = 0; // 声明一个双精度浮点数变量sum,用于累加数列的和double q = 2.0; // 声明一个双精度浮点数变量q,实际上这里q的值应该是2,不需要是浮点数scanf("%d", &i); // 从标准输入读取一个整数,存储在变量i中for(double j = 1; j <= i; j++) { // 开始一个for循环,从1迭代到i// 修正逻辑:直接检查j是否为奇数,而不是使用fmodif((int)j % 2 != 0) { // 如果j是奇数sum += 1 / j; // 累加正项} else { // 如果j是偶数sum -= 1 / j; // 累加负项}}printf("%.3lf\n", sum); // 打印结果,保留三位小数return 0; // 程序执行成功,返回0
}

知识点:pow函数

详见这篇文章

牛客网刷题 | BC83 牛牛学数列-CSDN博客

数列和序列:理解数列的概念,即一系列按照一定规律排列的数。

数学公式解析:解析给定的数学公式,并理解其数学意义。

条件表达式:使用条件表达式来确定数列中各项的符号,这涉及到奇偶性判断。

循环结构:使用循环结构来遍历数列的每一项,计算其值。

函数调用:在C语言中,使用 pow 函数来计算幂运算。

类型转换:在C语言中,进行类型转换以确保数学表达式中运算的准确性,例如,确保在进行除法运算时,至少有一个操作数是 double 类型。

输入输出操作:使用 scanf 进行输入操作,使用 printf 进行输出操作。

浮点数精度:处理浮点数时,理解精度问题,以及如何使用 %.3f 格式化输出来保留三位小数。

算法逻辑:设计算法来计算数列的和,这需要对数列的规律有清晰的认识。

代码结构:理解C语言的基本结构,包括函数定义、循环、条件语句等。

数学规律:识别并利用数学规律简化计算过程,例如,通过观察可以发现数列的符号交替出现,分母是递增的奇数。

  

http://www.lryc.cn/news/351537.html

相关文章:

  • quartz定时任务
  • Python基础学习笔记(五)——选择结构与循环结构
  • Vue插槽solt如何传递具名插槽的数据给子组件?
  • 小程序-收货地址管理模块实现
  • 【星海随笔】微信小程序(三)
  • pip(包管理器) for Python
  • Ubuntu上安装Maven
  • java中使用svnkit实现文件的版本管理
  • 了解 Linux 网络卡绑定:提高网络性能与冗余性
  • 2024年618购物狂欢节即将来袭!精选五款超值入手数码好物!
  • 中国AI独角兽资本大冒险
  • 项目十二:简单的python基础爬虫训练
  • OpenGL学习入门及开发环境搭建
  • three.js能实现啥效果?看过来,这里都是它的菜(08)
  • SpringBoot(九)之整合mybatis
  • 【实战教程】使用Spring AOP和自定义注解监控接口调用
  • 算法学习之:Raft-分布式一致性/共识算法
  • 彩色进度条(C语言版本)
  • C#和C++有什么区别?
  • 微信小程序报错:notifyBLECharacteristicValueChange:fail:nodescriptor的解决办法
  • 富格林:可信攻略阻止遭遇欺诈
  • 搭建淘宝扭蛋机小程序:技术选型与最佳实践
  • 【线性回归】梯度下降
  • GMSL图像采集卡,适用于无人车、自动驾驶、自主机器、数据采集等场景,支持定制
  • docker不删除容器更改其挂载目录
  • K8s Service 背后是怎么工作的?
  • ClickHouse配置与使用
  • 将某一个 DIV 块全屏展示
  • K8S集群再搭建
  • 工具-博客搭建