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

P2669 [NOIP2015 普及组] 金币

题目背景

NOIP2015 普及组 T1

题目描述

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 n n n 天每天收到 n n n 枚金币后,骑士会在之后的连续 n + 1 n+1 n+1 天里,每天收到 n + 1 n+1 n+1 枚金币。

请计算在前 k k k 天里,骑士一共获得了多少金币。

输入格式

一个正整数 k k k,表示发放金币的天数。

输出格式

一个正整数,即骑士收到的金币数。

1.题目分析

该题主要考察的是对循环的使用,一些数学公式:
等差数列求前n项和:n*(a1 + an)/2.
这里还可以考虑使用递归。

2.题目思路

写一个递归函数求n*n的前n项和,用于计算连续n天后发的总金币数。
键入天数d,需要 根据d计算是第n轮发n个金币,可以得到他们之间的关系是:1 + 2 +3 … +n =d.
所以可以根据等差数列的前N项公式求得,得到N的值后,调用递归函数,如果恰好不是n轮结束的天数,则需要减去多余的金币数。如:第4天: 1 +2 + 2 +3 + 3 等于 1 + 2 +2 +3 +3 +3 减去 一个3

3.代码实现

#include <stdio.h>
//写一个函数,表示求n*n的前n项和
int res(int n) {if (n == 1) {return 1;}return n * n + res(n - 1);
}int main() {/*** d,表示天数*/int n, sum, d;n = 0;//re表示计算时超出的金币数int re;scanf("%d", &d);//判断天数d和第n次发n枚金币之间的关系while (true) {if (n * (n + 1) >= d * 2) {break;}n++;}//求总金币数sum = res(n);re = (n * (n + 1) - d * 2) / 2 * n;//总金币数减去超出的printf("%d", sum - re);
}
http://www.lryc.cn/news/98007.html

相关文章:

  • 【2023】华为OD机试真题Java CC++ Python JS Go-题目0250-选修课
  • lama cleaner
  • 制作一个简易的计算器app
  • 48. 旋转图像
  • “深入解析Spring Boot:从入门到精通的完整指南“
  • 【C++】C++11——包装器
  • 插件使用权限管理软件(三)WebAPI项目IIS部署
  • [算法很美打卡] 多维数组篇 (打卡第二天)
  • K8S初级入门系列之十一-安全
  • 【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境6
  • “深入解析Spring Boot:从入门到精通“
  • [自然语言处理] 自然语言处理库spaCy使用指北
  • 【新日语(2)】第6課 拓哉もさしみを食べたがってします
  • uni-app 经验分享,从入门到离职(一)——初始 uni-app,快速上手(文末送书福利1.0)
  • Python爬虫实例之淘宝商品页面爬取(api接口)
  • 并发编程 | CompletionService - 如何优雅地处理批量异步任务
  • 医学案例|ROC曲线之面积对比
  • Kotlin线程的基本用法
  • 2.03 PageHelper分页工具
  • VUE中使用ElementUI组件的单选按钮el-radio-button实现第二点击时取消选择的功能
  • 瓴羊Quick BI:可视化大屏界面设计满足企业个性需求
  • 617. 合并二叉树
  • 【T1】存货成本异常、数量为零金额不为零的处理方法。
  • EtherNet IP转PROFINET网关连接西门子与欧姆龙方法
  • 低代码开发重要工具:jvs-flow(流程引擎)审批功能配置说明
  • [SQL挖掘机] - GROUP BY语句
  • 【ubuntu|内核】ubuntu 22.04修改内核为指定版本
  • Carla教程一:动力学模型到LQR
  • IDE/mingw下动态库(.dll和.a文件)的生成和部署使用(对比MSVC下.dll和.lib)
  • 点击加号添加新的输入框