牛客网刷题 | BC84 牛牛学数列2

news2024/11/15 19:47:43

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

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

感谢阅读!

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


描述

这次牛牛又换了个数列,他想计算:1+1/2+1/3+…+1/N的值。(保留6位小数)

输入描述:

输入一个整数,范围在0到1000

输出描述:

输出一个浮点数


思路 :

理解题目要求:题目要求计算数列  1+1/2+1/3+…+1/N 的和,其中 N 是一个整数,范围是 0 到 1000。结果需要保留六位小数。

输入处理:读取用户输入的整数 𝑁。

循环计算:使用一个循环从 11 到 𝑁(包括 𝑁),累加每一项 1 / i​。

精度控制:由于题目要求保留六位小数,我们需要在累加过程中就注意精度问题,避免因为浮点数的精度问题导致结果不准确。

输出结果:将计算得到的和转换为字符串格式,确保小数点后有六位数字,然后输出。

  • 在C语言中,scanf 用于读取输入,printf 用于格式化输出。
  • 循环中的 1.0 / i 确保了除法操作的结果是一个浮点数,避免了整数除法的问题。
  • printf 中的 %.6f 格式化输出确保了结果保留六位小数。

代码 1 :


int main()
{
	int a = 0;
	double c = 0;
	scanf("%d", &a);

	for (int b = 1; b <= a; b++)
	{
		c = 1.0 / b + c;
	}

	printf("%.6lf", c);
	return 0;
}

代码 2:

#include <stdio.h> // 引入标准输入输出库

int main() // 主函数的开始
{
    double i = 1; // 定义一个变量i,表示分子,初始值为1
    double n = 0; // 定义一个变量n,用于存放用户输入的整数,初始值为0
    double j = 0; // 定义一个变量j,用于for循环的迭代,初始值为0
    double sum = 0; // 定义一个变量sum,用于累加求和,初始值为0
    scanf("%lf", &n); // 从标准输入读取一个浮点数,存储在变量n中

    if (n == 1) // 如果输入的n等于1
    {
        printf("1\n"); // 输出1,因为1+1/2+...+1/1的和就是1
    }
    else if (n > 0 && n <= 1000) // 如果输入的n大于0且小于等于1000
    {
        for (j = 1; j <= n; j++) // 使用for循环,从1迭代到n
        {
            sum = (i / j) + sum; // 计算每一项1/j,并加到sum上
        }
        printf("%.6lf\n", sum); // 输出累加和sum,保留六位小数
    }
    else // 如果输入的n不满足条件(即n为负数或大于1000)
    {
        printf("输入错误\n"); // 输出错误信息
    }
    
    return 0; // 返回0,表示程序正常结束
}

//改进后的:
#include <stdio.h>

int main() 
{
    double n = 0; // 用户输入
    double sum = 0; // 用于累加的变量,初始化为0
    scanf("%lf", &n); // 读取用户输入的整数

    if (n == 1) 
    {
        printf("1\n"); // 如果输入的n为1,直接输出1
    } 

    else if (n > 0 && n <= 1000) 
    {
        for (double j = 1; j <= n; j++) 
        { // 开始for循环,从1到n
            sum += 1.0 / j; // 直接使用1.0作为分子,累加到sum上
        }
        printf("%.6lf\n", sum); // 输出累加和sum,保留六位小数
    } 

    else 
    {
        printf("输入错误\n"); // 如果输入的n不满足条件,输出错误信息
    }

    return 0; // 程序正常结束
}

/*在这个修改后的版本中,我去掉了 double i = 1; 
这行代码,因为不需要单独定义一个变量来表示分子。
在 for 循环中,直接使用 1.0 / j 来进行计算,
其中 1.0 表示分子,j 表示分母。
这样代码更为简洁,并且避免了不必要的变量定义。*/

代码 3 :

#include <stdio.h>

int main() {
    int N;
    double sum = 0.0; // 用于累加的变量,初始化为0.0

    // 读取输入
    scanf("%d", &N);

    // 循环计算数列和
    for (int i = 1; i <= N; ++i) {
        sum += 1.0 / i; // 注意这里1.0是双精度浮点数,以确保除法结果是浮点数
    }

    // 保留小数点后六位,使用printf的格式化输出来实现
    printf("%.6f\n", sum);

    return 0;
}

知识点 :

浮点数精度:在C语言中,涉及到小数的计算时,需要使用浮点数类型,如 floatdouble。由于题目要求保留六位小数,使用 double 类型可以提供足够的精度。

输入验证:在读取用户输入后,应进行验证以确保输入值在题目要求的范围内(0到1000)。如果不在这个范围内,应提示用户输入错误。

循环控制:使用 for 循环来遍历从1到N(包括N)的整数,并计算每一项的和。

累加求和:在循环中,需要将每一项 1.0 / j 加到累加器 sum 上。注意这里使用 1.0 而不是 1,因为 1.0 是一个 double 类型的值,这样可以确保除法操作的结果是一个浮点数。

格式化输出:使用 printf 函数的格式化输出 %.6lf 来控制输出的精度,保留小数点后六位。

条件语句:使用 ifelse if 语句来处理不同的输入情况,如输入为1时的特殊情况,或者输入不符合要求时的错误提示。

变量初始化:在开始计算之前,应确保所有变量(如累加器 sum)已经被初始化,以避免使用未初始化的变量。

整数与浮点数的除法:在C语言中,当两个操作数都是整数时,除法结果也是整数。因此,至少有一个操作数必须是浮点数,以进行浮点除法。

代码风格:保持代码的可读性,使用适当的变量命名,添加注释来解释代码的功能。

资源限制:注意题目中提到的时间限制和空间限制,确保算法的效率。

四舍五入:题目要求结果保留六位小数,这意味着需要进行四舍五入处理,C语言标准库中 printf 函数可以直接完成这个任务。

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1676880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《控制系统实验与综合设计》综合四至六(含程序和题目)

1.电机模型辨识实验 1.1 实验目的 &#xff08;1&#xff09;掌握一阶系统阶跃响应的特点&#xff0c;通过实验加深对直流电解模型的理解&#xff1b; &#xff08;2&#xff09;掌握系统建模过程中参数的整定&#xff0c;体会参数变化对系统的影响&#xff1b; &#xff0…

SpringBoot解决CORS跨域——WebMvcConfigurationSupport

前端请求后端报错了。 状态码&#xff1a;403 返回错误&#xff1a;Invalid coRs request 增加配置类WebMvcConfig Configuration public class WebMvcConfig extends WebMvcConfigurationSupport {Overridepublic void addCorsMappings(CorsRegistry registry) {// 允许跨域…

JavaScript异步编程——10-async异步函数【万字长文,感谢支持】

异步函数&#xff08;用 async 声明的函数&#xff09; 异步函数的定义 使用async关键字声明的函数&#xff0c;称之为异步函数。在普通函数前面加上 async 关键字&#xff0c;就成了异步函数。语法举例&#xff1a; // 写法1&#xff1a;函数声明的写法async function foo1(…

杨校老师项目之基于单片机STC89C52的智能环境监测系统【嵌入式】

获取全套资料&#xff1a; 有偿获取&#xff1a;mryang511688 技术&#xff1a;C语言、单片机等 摘要&#xff1a; 此设计可分为三个主要部分。此中的温度和湿度的检测功能&#xff0c;通过操纵单总线型温湿度传感器DHT11以数字形式显示&#xff0c;实现了切确测得温湿度的功能…

Python | Leetcode Python题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution:def grayCode(self, n: int) -> List[int]:ans [0] * (1 << n)for i in range(1 << n):ans[i] (i >> 1) ^ ireturn ans

uniapp 实现下拉刷新 下滑更新

效果图 在app或者小程序中向下滑动 会出现刷新数据 ,而上拉到底 需要更新数据 功能实现 主要俩种方式 依赖生命周期 在page.json中开启 page.json "style" : {"navigationBarTitleText" : "小小练习","backgroundTextStyle": &qu…

Linux环境部署与命令技巧

Linux环境部署与命令技巧 安装Java 首先确保已经安装了Java。通过运行以下命令检查Java是否已安装&#xff1a; java -version # 查看Java版本如果未安装Java&#xff0c;可以使用以下命令安装OpenJDK&#xff1a; sudo yum install java-11-openjdk # 安装OpenJDK 11创建一个…

用Swagger(工具Knife4j )代替postman来进行构建、测试和调试 API

什么是Swagger&#xff1f; Swagger 是一个用于设计、构建和文档化 RESTful Web 服务的开源框架。它允许开发者设计 API&#xff0c;然后生成对应的 API 文档&#xff0c;提供给团队成员或者第三方开发者查阅。Swagger 的核心是 OpenAPI 规范&#xff08;之前称为 Swagger 规范…

来学习线程啦

线程的相关概念 程序 简单点说&#xff1a;程序就是我们写的代码&#xff1b;也可以理解为&#xff1a;为完成特定任务&#xff0c;用某种语言编写的一组指令的集合 进程 进程是指运行中的程序。 比如&#xff1a;我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系…

Centos 6.10 安装oracle10.2.0.1

由于阿里云机房要下架旧服务器&#xff0c;单位未购买整机迁移服务&#xff0c;且业务较老不兼容Oracle11g&#xff0c;所以新购买一台新服务器进行安装Oracle10.2.0.1 &#xff0c;后续再将数据迁移到新服务器上。 对外ip 内部ip 数据库版本 操作系统版本 实例名 源库 1…

【MATLAB】Enigma机加密原理与自实现

文章目录 什么是EnigmaEnigma机加密通信流程Enigma的物理构造Enigma的加密设置Enigma加密通信密码重新设置Enigma加密消息拼接注意 Enigma的解密分解设置Enigma解密通信密码重新设置Enigma解密消息 Enigma的弱点MATLAB自实现Enigma加密与解密Enigma_functionRotate_functiontes…

排序(一)----冒泡排序,插入排序

前言 今天讲一些简单的排序,冒泡排序和插入排序,但是这两个排序时间复杂度较大,只是起到一定的学习作用,只需要了解并会使用就行,本文章是以升序为例子来介绍的 一冒泡排序 思路 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的序列&#xff0c;每次比较相邻…

K8S内容

K8S介绍 1、故障迁移:当某一个node节点关机或挂掉后&#xff0c;node节点上的服务会自动转移到另一个node节点上&#xff0c;这个过程所有服务不中断。这是docker或普通云主机是不能做到的 2、资源调度:当node节点上的cpu、内存不够用的时候&#xff0c;可以扩充node节点&…

详细分清Session,Cookie和Token之间的区别,以及JWT是什么东西

Cookie Cookie是一种小型的文本文件&#xff0c;由网站在用户访问时存储在其计算机或移动设备上&#xff0c;Cookie主要用于跟踪、识别和存储有关用户的信息。 简单来说Cookie就是用来存储某些后端发送给前端的数据&#xff0c;例如我们登陆后&#xff0c;后端会返回一个登录…

求正方形阴影部分面积

正方形边长6&#xff0c;求阴影部分面积 xy6① vw6② 1/26v1/23x1/263③ 1/26v1/26y1/266④ ③是左下角三角形的面积&#xff0c;④是左上角三角形的面积。 求解方程组得到x2 阴影部分面积1/2*3x3.

海豚调度器如何看工作流是在哪个worker节点执行

用海豚调度器&#xff0c;执行一个工作流时&#xff0c;有时成功&#xff0c;有时失败&#xff0c;怀疑跟worker节点环境配置不一样有关。要怎样看是在哪个worker节点执行&#xff0c;在 海豚调度器 Web UI 中&#xff0c;您可以查看任务实例&#xff0c;里面有一列显示host&a…

网络安全快速入门(九)MySQL进阶操作

上一章我们了解了对表及库的基本增删查改操作&#xff0c;本章我们针对增删查改内容进行与一些拓展&#xff0c; 9.1字段修饰及数据类型 我们之前在创建表时用到的格式为&#xff1a; create table 表名 ( 字段名1 字段数据类型&#xff08;数据类型长度&#xff09;, 字段名2 …

刷代码随想录有感(65):回溯算法——组合问题

题干&#xff1a; 代码&#xff1a; class Solution { public:vector<vector<int>> res;vector<int> tmp;void backtracking(int n, int k, int start){if(tmp.size() k){res.push_back(tmp);return;}for(int i start; i < n; i){tmp.push_back(i);bac…

[Algorithm][回溯][组合][目标和][组合总和]详细讲解

目录 1.组合1.题目链接2.算法原理详解3.代码实现 2.目标和1.题目链接2.算法原理详解3.代码实现 3.组合总和1.题目链接2.算法原理详解3.代码实现 1.组合 1.题目链接 组合 2.算法原理详解 思路&#xff1a;每次都只选一个数&#xff0c;此后只能选它后面的数函数设计&#xff…

全面提升数据采集效率:亮数据产品的应用与评估详解

全面提升数据采集效率&#xff1a;亮数据产品的应用与评估详解 文章目录 全面提升数据采集效率&#xff1a;亮数据产品的应用与评估详解背景应用场景&#xff1a;平台首页信息抓取准备评测素材详细的产品使用和评测流程产品介绍亮数据的IP代理服务亮数据的爬虫工具及采集技术 注…