2016年海淀区信息学竞赛小学组详细答案

2023-10-15 02:50

本文主要是介绍2016年海淀区信息学竞赛小学组详细答案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 价钱统计

分析
无论用printf还是用setprecision,都无法达到四舍五入的结果。

#include <iostream>
#include <cstdio>
#include <iomanip>
using namespace std;int main()
{printf("%.1f\n", 1.15);printf("%.1f\n", 1.25);printf("%.1f\n", 1.35);printf("%.1f\n", 1.45);printf("%.1f\n\n", 1.55);cout << fixed << setprecision(1) << 1.15 << endl;cout << fixed << setprecision(1) << 1.25 << endl;cout << fixed << setprecision(1) << 1.35 << endl;cout << fixed << setprecision(1) << 1.45 << endl;cout << fixed << setprecision(1) << 1.55 << endl;return 0;
}

运行结果

1.1
1.2
1.4
1.4
1.61.1
1.2
1.4
1.4
1.6

从结果可以看出,浮点数保留小数位没有什么规律,既不是“四舍五入”,也不是“四舍六入五成双”。这与浮点数的不精确存储有关系。

解法一

(1)下面的代码,用Codeblocks运行的结果是1.1,用DevC++运行的结果是1.2

#include <cstdio>int main()
{float a = 1.15;a = int(a * 10 + 0.5)/10.0;printf("%.1f\n", a);return 0;
}

(2)把上面的代码中的float改成double后,在Codeblocks中运行的结果仍然是1.1,在DevC++中运行的结果仍然是1.2

#include <cstdio>int main()
{double a = 1.15;a = int(a * 10 + 0.5)/10.0;printf("%.1f\n", a);return 0;
}

(3)下面的代码,用Codeblocks运行的结果是1.1,用DevC++运行的结果是1.2

#include <cstdio>
#include <cmath>int main()
{float a = 1.15;a = floor(a * 10 + 0.5)/10; // floor函数的返回类型为floatprintf("%.1f\n", a);return 0;
}

(4)把上面的代码中的float改成double后,在Codeblocks中和DevC++中运行的结果都是1.2

#include <cstdio>
#include <cmath>int main()
{double a = 1.15;a = floor(a * 10 + 0.5)/10; // floor函数的返回类型为doubleprintf("%.1f\n", a);return 0;
}

从这四个函数的运行结果可以看出,对于相同的取整或floor函数,不同的编程工具会出现不同的运行结果。因为考试时,指定的编程工具是DevC++,所以上面四种写法都是可以的。若是平时练习,则可以使用上面的第四种写法,即使用double和floor()结合。

(5)本题的实现代码为

#include <cstdio>
#include <cmath>int main()
{double a, b, c, d, total;scanf("%lf%lf%lf%lf", &a, &b, &c, &d);a *= 1.2;b *= 3.5;c *= 4.5;d *= 5;a = floor(a * 10 + 0.5) / 10;b = floor(b * 10 + 0.5) / 10;c = floor(c * 10 + 0.5) / 10;d = floor(d * 10 + 0.5) / 10;total = a + b + c + d;printf("%.1f\n%.1f\n%.1f\n%.1f\n%.1f\n", a, b, c, d, total);return 0;
}

解法二

可以使用round函数实现四舍五入

#include <cstdio>
#include <cmath>int main()
{double a, b, c, d, total;scanf("%lf%lf%lf%lf", &a, &b, &c, &d);a *= 1.2;b *= 3.5;c *= 4.5;d *= 5;// round函数返回类型与参数类型一样,即参数若为double,返回doublea = round(a * 10) / 10;b = round(b * 10) / 10;c = round(c * 10) / 10;d = round(d * 10) / 10;total = a + b + c + d;printf("%.1f\n%.1f\n%.1f\n%.1f\n%.1f\n", a, b, c, d, total);return 0;
}

2 打印图形

#include <iostream>
using namespace std;int main()
{char c;cin >> c;int lineCnt = c - 'A' + 1;for(int i = 0; i < lineCnt; i++){for(int j = 0; j < i; j++){cout << ' ';    // 输出左侧的空格}char x = c - i;for(; x >= 'A'; x--){cout << x;}for(x = 'A'; x <= c - i - 1; x++){cout << x;}cout << endl;}return 0;
}

3 数列计算

#include <iostream>
#include <iomanip>
using namespace std;int main()
{int n;cin >> n;int nume = 4; // 分子int deno = 7; // 分母double sum = nume * 1.0 / deno;for(int i = 2; i <= n; i++){int tmp = nume;nume = deno;deno += tmp;sum += nume * 1.0 / deno;}cout << nume << '/' << deno << endl;cout << fixed << setprecision(2) << sum;return 0;
}

了解少儿编程、信息学竞赛请加微信307591841或QQ群581357582
信息学竞赛公众号.jpg

这篇关于2016年海淀区信息学竞赛小学组详细答案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/haishu_zheng/article/details/89068197
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/214863

相关文章

Macos创建python虚拟环境的详细步骤教学

《Macos创建python虚拟环境的详细步骤教学》在macOS上创建Python虚拟环境主要通过Python内置的venv模块实现,也可使用第三方工具如virtualenv,下面小编来和大家简单聊聊... 目录一、使用 python 内置 venv 模块(推荐)二、使用 virtualenv(兼容旧版 P

Python实现一键PDF转Word(附完整代码及详细步骤)

《Python实现一键PDF转Word(附完整代码及详细步骤)》pdf2docx是一个基于Python的第三方库,专门用于将PDF文件转换为可编辑的Word文档,下面我们就来看看如何通过pdf2doc... 目录引言:为什么需要PDF转Word一、pdf2docx介绍1. pdf2docx 是什么2. by

Logback在SpringBoot中的详细配置教程

《Logback在SpringBoot中的详细配置教程》SpringBoot默认会加载classpath下的logback-spring.xml(推荐)或logback.xml作为Logback的配置... 目录1. Logback 配置文件2. 基础配置示例3. 关键配置项说明Appender(日志输出器

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框

Spring Boot 集成 Solr 的详细示例

《SpringBoot集成Solr的详细示例》:本文主要介绍SpringBoot集成Solr的详细示例,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录环境准备添加依赖配置 Solr 连接定义实体类编写 Repository 接口创建 Service 与 Controller示例运行

自研四振子全向增益天线! 中兴问天BE6800Pro+路由器拆机和详细评测

《自研四振子全向增益天线!中兴问天BE6800Pro+路由器拆机和详细评测》中兴问天BE6800Pro+路由器已经上市,新品配备自研四振子全向增益天线,售价399元,国补到手339.15元,下面我们... 中兴问天BE6800Pro+路由器自上市以来,凭借其“旗舰性能,中端价格”的定位,以及搭载三颗自研芯片

ubuntu20.0.4系统中安装Anaconda的超详细图文教程

《ubuntu20.0.4系统中安装Anaconda的超详细图文教程》:本文主要介绍了在Ubuntu系统中如何下载和安装Anaconda,提供了两种方法,详细内容请阅读本文,希望能对你有所帮助... 本文介绍了在Ubuntu系统中如何下载和安装Anaconda。提供了两种方法,包括通过网页手动下载和使用wg

SpringBoot实现二维码生成的详细步骤与完整代码

《SpringBoot实现二维码生成的详细步骤与完整代码》如今,二维码的应用场景非常广泛,从支付到信息分享,二维码都扮演着重要角色,SpringBoot是一个非常流行的Java基于Spring框架的微... 目录一、环境搭建二、创建 Spring Boot 项目三、引入二维码生成依赖四、编写二维码生成代码五