国王骑士金币问题

2023-11-03

本文以模拟算法的两种方式解题,同时附录递归算法(不建议使用)。

国王发放金币给骑士,按天数发。

天数n 1 2 3 4 5 6 7 8
每天的金币k 1 2 2 3 3 3 4 4

 

分组模拟:

IO

输入天数n,输出金币总数res

 

循环 (按天数执行)

确定天数n>0的时候执行发放金币,故使用while循环

循环中代表每天发金币的操作,所以循环中包含n的变化

 

分组 (按每天金币的数量)

可以观察到,在连续k天中发放k枚金币

包含可分组与不可分组

代码C++:

    while(n>0){
        if(n>=k){       
            n-=k;       
            result+=k*k;
        	k++;
        }else{
            result+=k*n;
            n-=k;        
        }          
    }

 

完整代码

C++

#include<bits/stdc++.h>
using namespace std;
int main(){
//	天数,输入数 
    int n;
    cin >> n
//    每天给的金币数,从1开始模拟 
    int k=1;          //1
//    金币总数,从0开始模拟 
    int result=0;
    while(n>0){
//    	k金币数同时表示发放该k数金币的天数,k天发放k^2枚金币 
        if(n>=k){       //2
//        天数与金币数的关系就是连续1天发1个,连续2天,发2个;连续3天,发3个 
//        如果n天数大于金币数。 
            n-=k;       //3 
            result+=k*k;
        	k++;
        }else{
            result+=k*n;
            n-=k;         //4
        }          //5
    }
    
    cout << result;
    return 0;
}

Python:

# -*- coding: utf-8 -*-

# 输入天数n
# 输出res
n=int(input("输入天数"))
res=0
# 按天数发金币的初始值为1
k=1

while n>0:
    # 执行按天发金币
    # 分组

    if n>=k:
        # 可分组
        res+=k*k
        # 剩余天数的变化
        n-=k
        # 每组金币递增
        k+=1
    else:
        res+=k*n
        n=0

print("金币总数",res)

 

天数模拟:

void first(){
		
	int n;
//	输入天数 
	cin >> n;
	
//	模拟天数,从0开始
	int days=0; 
	
//	输出金币数
	int res=0;
	
//	从i=1,从第一天1个金币开始模拟。 无限循环 
	for (int i=1;1;i++){
//		每组一共j天,j最大值等于金币数 
		for(int j=1;j<=i;j++){
//			每天金币数 
			res+=i;
//			模拟天数递增
			days++;
			
			if(days==n){
				cout << "输出金币总量: " << res <<endl;
				
				return;
			}
		}
	}
}

 

递归算法:

递归算法舍近求远,不建议掌握

#include <iostream>
using namespace std;

//国王骑士与金币问题
//国王第一天给骑士1枚金币
/**
	天数与金币的关系如下
	1,1
	2,2
	3,2
	4,3
	5,3
	6,3
	7,4
	8,4
	9,4
	10,4 
*/ 

//分析可知(((1)k^2)k^3) k为天数递增数
//递归算法
int recursion(int k,int coins){
	if(k==1){
		coins+=1;
		return coins;
	}else{
		coins+=k*k;
		recursion(k-1,coins);
	}
}

//连续n天给n个金币 
int n_recur(int n,int k){
	if(k<=0){
		return n-1;
	}else{
		n+=1;
		k-=n;
		n_recur(n,k);
	}
}

//n的余数 
int n_recur(int k,int n){
	if(k==1){
		return n-=1;
	}else{
		n-=k;
		n_recur(k-1,n);
	}
}

int main(){
	
	int n;
	cin >> n;
	int k=n_recur(1,n);
	
	cout << " k= " << k << endl;
	
	int remainder=n_recur(k,n);
	
	cout << "分组剩余=" << remainder << endl;
	
	int coins=recursion(k,0);
	
	coins+=remainder*(k+1);
	
	cout << coins;
} 

//递归算法舍近求远,不建议
 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

国王骑士金币问题 的相关文章

  • webpack4---模块化打包工具(一)

    一 webpack4初识 1 首先先了解几个规范 ES规范 导出 export default Header 导入 import Header from header js CommonJS规范 导出 module exports Head
  • 如何快速安装和配置Node.js环境

    Node js是一种可以简化Web应用程序开发的平台 它使用JavaScript编写 并使用Chrome V8 JavaScript引擎 本文将介绍如何快速安装和配置Node js环境 为读者打开了Node js的大门 并提供了背景信息 一
  • 有趣的数据结构算法11——实现中缀表达式到后缀表达式的转换

    有趣的数据结构算法11 实现中缀表达式到后缀表达式的转换 解题思路 实现代码 GITHUB下载连接 这是学习栈的最后一篇blog了 在上一篇博客里 讲述了如何利用栈计算后缀表达式的结果 但是谁会无缘无故用后缀表达式写一个式子在那里计算呢 这
  • Quartz 之 JobExecutionContext 解读

    项目地址 https github com yuleiqq quartz example tree master quartz study 查看源码注释可以得知 JobExecutionContext 是一个包含了各种上下文信息的句柄 指向
  • 软件工程-分离原理

    分离原理是建立企业管理信息系统分析方法体系的基础分离原理与组合原理的关系定义分离原理 将研究对象中符合相同设计方法的同类项进行分离 归集 这种分离方式为在软件工程中建立具有普遍意义的分析与设计模型奠定了基础 作用将企业的运行体系进行拆分 在
  • [QT编程系列-13]:QT快速学习 - 1- 初识

    目录 第1章 QT的介绍 1 1 QT VS MFC 1 2 QT历史 1 3 QT的应用 1 4 QT学习方法 1 5 QT对象树 1 6 2 8定律 1 7 QT优势 1 8 QT支持的平台 第2章 QT UI是各种控件对象的堆积 第3
  • 【2021版本】软件测试的分类

    按测试阶段分类 单元测试 对软件中最小可充实单元进行检查和验证 单元测试的原则 尽可能保证各个测试用例是相互独立的 一般由代码的开发人员来实施 用以检验所开发的代码功能符合自己的设计要求 单元测试的益处 能尽早发现缺陷 有利于重构 简化集成
  • 决策树的典型案例

    小王是一家著名高尔夫俱乐部的经理 但是他被雇员数量问题搞得心情十分不好 某些天好像所有人都來玩高尔夫 以至于所有员工都忙的团团转还是应付不过来 而有些天不知道什么原因却一个人也不来 俱乐部为雇员数量浪费了不少资金 小王的目的是通过下周天气预
  • CentOS7 升级Python2.x到3.x

    CentOS 7 中默认安装了 Python 版本比较低 2 7 5 为了使用新版 3 x 需要对旧版本进行升级 由于很多基本的命令 软件包都依赖旧版本 比如 yum 所以 在更新 Python 时 建议不要删除旧版本 新旧版本可以共存 一
  • 临时标识--免登陆uuid

    一 什么是临时标识 就是一个字符串 可以让用户查看购物车等需要注册登录的信息 通常用uuid就可以创建这个字符串 临时标识 在请求拦截器中加 存储在vuex中的state userTempId 二 正式开始 1 下载创建uuid 并且生成用
  • 安卓隐藏输入法键盘以及去除光标方法

    在开发中遇到一个需求 点击屏幕非编辑区以及点击键盘回车键后要隐藏输入法以及光标要关闭 因此向各位分享一下做法 一 点击屏幕处于非edittext时让键盘消失以及清除edittext光标方法 1 在Activity中使用如下代码 重写事件分发
  • Android Jetpack新成员Compose尝鲜

    前言 Compose的alpha版已经出来有段时间了 前不久的GDG上郭神介绍了Hilt 没曾想居然没有Compose和4 2版本的studio介绍 Compose是google今年在jetpack里新增的一位成员 想着能越过传统的xml
  • 强化学习圣经-GridWorld实现

    import numpy as np import matplotlib pyplot as plt grid size 5 posA 0 1 primeA 4 1 posB 0 3 primeB 2 3 discount 0 9 acti
  • WEB-小项目(关键词)

    数据库脚本 SQLyog Ultimate v12 09 64 bit MySQL 5 7 27 log 40101 SET NAMES utf8 create table keyword copy id int 32 name varch
  • 一,sdio总线简介

    sdio总线简介 一 简要 二 SDIO总线物理电气特性 1 card电压的供电范围 2 信号pin脚定义 3 Bus Speed模式 三 SDIO Card类型分类 四 SDIO Card 传输模式 一 简要 SDIO协议是由SD协议演化
  • Python爬虫爬取快代理上的免费代理

    目标网站 https www kuaidaili com free 对目标网站进行分析 发现点击下一页时 url的变化只有最后的数字在变化 因此用一个循环来遍历所有的url 定义一个函数来获取网页信息 最后用Excel表格来存储
  • 【路由带参跳转】解决带参跳转到别的页面然后刷新页面参数就会丢失问题

    使用vue做了一个路由带参跳转页面 点击然后触发handleEditDevice函数 进行路由跳转 代码如下 跳转并传参 设备详情按钮 handleEditDevice item item item 0 null item 完成页面跳转 待
  • 【2023华为OD机试题】分奖金

    题目描述 公司老板做了一笔大生意 想要给每位员工分配一些奖金 想通过游戏的方式来决定每个人分多少钱 按照员工的工号顺序 每个人随机抽取一个数字 按照工号的顺序往后排列 遇到第一个数字比自己数字大的 那么 前面的员工就可以获得 距离 数字差值
  • 阶梯网络Ladder Network

    在这里主要讲一下用于半监督学习的ladder network 网上别人分享的资料太少了 也不知道对不对 下面内容请带着怀疑的角度阅读 如有问题 欢迎指出 在讲半监督学习之前 先简单聊聊监督学习 在监督学习中 我们将原始数据通过简单的预处理
  • VSCode安装及环境配置详细教程(windows版本)

    目录 安装VSCode 安装Python 检查环境变量 检查Python是否能运行 VSCode环境配置 切换成简体中文 添加Python插件 编写代码运行 请先在官网下载Python和VSCode安装包 保存至本地 Python官网 ht

随机推荐

  • 触摸屏上报触摸坐标错误的原因分析

    触摸屏的坐标分布 常规情况下 产品正常摆放视角下 TP左上角为原点位 如果不确定需要拿到工程结构图纸 按照图纸标注设定 特殊情况下 有些产品的显示屏因为显示驱动的影响 产品正常摆放时LCM的原点位不在左上角 这个需要和方案确认 以上两种情况
  • 文档翻译软件哪个好?来一起探讨一下吧

    有近十个文档需要翻译 小问题 我有秘笈可以快速搞定它 作为打工人的你 还在自己辛辛苦苦地翻译文档中的外语内容吗 这样多费时啊 这种吃力不讨好的行为可不推荐 来跟我学学文档翻译技巧吧 那就是借助文档翻译软件来进行翻译操作 如果不清楚文档翻译软
  • 接口还在吗?

    突然感觉自己老了 连程序也写不动的惰性 但是 人不能被惰性打倒 人是被自己打倒的 如果一个人不能response自己的行为 那么他将什么都不能request到 人们现在已经把编程的经历都转义到接口上来了 但是 我们作为一个程序员 应该是能适
  • PyCharm单独安装PyKDL

    用于在Ubuntu下Pycharm独立使用PyKDL 不需要ros 使用Pycharm的安装器安装的PyKDL是不能使用的 引用会报错 1 把安装器安装的给卸载掉 2 去GitHub下载代码 Git下载 还有一个类似的代码hrl kdl 不
  • 服务器任务管理器详细信息,服务器任务管理器数字进程

    服务器任务管理器数字进程 内容精选 换一换 针对Windows 2012操作系统 由于安装应用系统会用到 net framework 3 5 而2012自带的 net framework 4 5版本需要卸载 但是卸载之后可能会遇到黑屏 无法
  • mysql按照一个字段分组查询_SQL如何查询一张表的所有字段并按其中一个字段进行分组...

    展开全部 1 创建测试表 create table test group cols id number value varchar2 20 remark varchar2 20 2 插入测试数据 insert into test group
  • java命令大全

    转载地址 http www cnblogs com langtianya p 4208135 html JAVA命令大全 1 java exe 运行java程序 这个相信每一位用Java的人知道了 2 javac exe 编译的Java程序
  • QT-如何使用智能指针

    QT框架提供了三种智能指针 QSharedPointer QWeakPointer和QScopedPointer 这些智能指针可以有效地管理QT对象的内存 避免内存泄漏的问题 同时还能提高代码的可读性和可维护性 QSharedPointer
  • stata的一些操作命令

    一 面板数据填充 面板数据填充 设置好第一年和最后一年 然后用如下命令 sort id year 然后按照id和year排序 xtset id year 设定面板样本和时间变量 ssc install tsfill replace 安装时间
  • 时下火热的 NFT 究竟有什么用?

    如今 NFT 正在以一股十分火热的趋势开始席卷全球 无论是个人还是企业 都开始关注起了这个由区块链技术所衍生出来的全新数字生态 我国为了防止 NFT出现投机 炒作等风险 对于 NFT 二级市场有着严格的监管和限制 使得整个市场并不如国外那般
  • AndroidKiller介绍与使用

    往期推荐 什么是虚拟机 虚拟机有那几种 APK安装流程及详细步骤 APK打包流程 APK文件结构 Android开发之数据储存 APK属于压缩文件 不可以通过直接解压的方式来获取明文内容 需要借助AndroidKiller这类的第三方的工具
  • 关卡9-面向对象三大特征

    封装概述 是面向对象三大特征之一 封装 继承 多态 是面向对象编程语言对客观世界的模拟 客观世界里成员变量都是隐藏在对象内部的 外界是无法直接操作的 封装原则 将类的某些信息隐藏在类内部 不允许外部程序直接访问 而是通过该类提供的方法来实现
  • 毫米波与太赫兹:使用matlab RF propagation进行电波仿真可视化

    使用Matlab RF propagation 工具箱进行电波传播的仿真和可视化显示 并对结果进行分析 仿真场景自定义 天线参数自定义 频率选择移动通信典型频段 或未来移动通信规划频段 课程设计报告参考标准学术期刊论文格式 设计代码1如下
  • 宽带服务器盒信号灯红色闪烁,宽带出现光信号灯是红色是怎么回事

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 如光信号灯变红色或者闪烁 说明接收不到光纤信号 通常是由于存在以下几种情况导致 1 光猫光接口有问题 需要更换光猫 2 室内尾纤连接光猫接头松脱 把接头插好即可恢复 3 室
  • 使用 Ccrypt 在 Linux 中加密/解密文件

    Ccrypt 是一个用于数据加密和解密的命令行工具 Ccrypt 基于 Rijndael 密码 与 AES 标准中使用的密码相同 另一方面 在 AES 标准中 使用 128 位块大小 而 ccrypt 使用 256 位块大小 Ccrypt
  • new运算符

    define CRT SECURE ND WARNINGS include
  • 第4章 BP神经网络

    BP神经网络 1 BP神经网络介绍及发展背景 从前面介绍的感知器学习规则来看 其权值的调整 取决于期望输出与实际输出之差 Delta w i eta t y x i 但是对于各个隐藏层的节点来说 不存在已知的期望输出 因而该学习规则不能用于
  • 打印3的倍数的数

    写一个代码打印1 100之间所有3的倍数的数字 解题思路 1 3的倍数一定能够被3整除 因此i 3 0表达式成立时 则i一定是3的倍数 2 要输出1 100之间的3的倍数 那只需要从1 100循环100次即可 每次拿到i之后 用i 3 0检
  • ECharts可视化图标库 (事件与行为)

    ECharts中的事件与行为 日常开发中用到echarts 一般是用来展示数据 很少在图表上添加一些事件监听函数 但是没用过不代表没有 比如鼠标悬浮之后的高亮样式和鼠标悬浮后显示的tootip 这都属于默认的鼠标悬浮事件 除此之外 如果想要
  • 国王骑士金币问题

    本文以模拟算法的两种方式解题 同时附录递归算法 不建议使用 国王发放金币给骑士 按天数发 天数n 1 2 3 4 5 6 7 8 每天的金币k 1 2 2 3 3 3 4 4 分组模拟 IO 输入天数n 输出金币总数res 循环 按天数执行