全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)(七)

实战训练—鸡兔同笼

问题描述:

一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数为a,问笼子里面至少有多少只动物,至多有多少只动物。

输入格式:

一行,一个正整数a(a<32768)。

输出格式:

一行,包含两个正整数,第一个是笼子里最少的动物数,第二个是笼子里最多的动物数,两个正整数用一个空格分开。如果没有满足要求的答案,则输出两个0,中间用一个空格分开。

输入输出样例:

输入样例1

输出样例1

40

10 20

输入样例2

输出样例2

50 

13 25

输入样例3

输出样例3

31

0 0

问题分析:

根据题意,已知笼子里面动物的脚总个数,来求解笼子里动物数的最小值和最大值,分别用minv和maxv来表示动物数的最少值和最大值,最直接的做法,依次罗列鸡和兔子可能的个数,然后用这两种动物数总和和最大值最小值比较,其中鸡的个数最少为0只,最大就是脚的总数a去除以2的值,兔子的个数最小值为0只,最大值为a/4,具体实现可以使用for嵌套循环枚举鸡和兔子的数量,鸡的个数用外层循环变量i来控制,兔子的个数用内层循环变量j来控制,然后判断i和j的值是否满足题目中的条件,即它们的脚总数为a,如果满足条件,紧接着去判断当前个数和最大值最小值的关系,并根据实际情况修改最大值最小值。具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main(){int a;//定义动物脚总数变量a cin>>a;//输入a的值 int maxv=0,minv=32768;//定义动物总数最大值变量maxv并初始化为0、最小值变量 minv并初始化为32768 for(int i=0;i<=a/2;i++){//定义外层循环变量i控制鸡的个数,从0到a/2 for(int j=0;j<=a/4;j++){//定义内层循环变量j控制兔子的个数,从0到a/4 if(2*i+4*j ==a){//鸡i的个数乘以2加上兔子的个数j乘以4的总脚数是否为a, if(i+j>maxv){//判断当前鸡的个数加兔子的个数是都比最大值大,如果大,将最大值设置为i+j maxv = i+j;}if(i+j<minv){//判断当前鸡的个数加兔子的个数是都比最小值小,如果小,将最小值设置为i+j minv = i+j;}}}}if(maxv>0){//判断是否有符合条件的解,maxv不为初始值,表明有解 cout<<minv<<" "<<maxv<<endl;}else{//否则无解,输出0 0 cout<<0<<" "<<0<<endl;}	return 0;
}

在程序运行之后有可能出现超时的问题,for嵌套循环,每次执行一次外层循环,内层循环要全部执行一次,通过计算执行的最大次数为a/2乘以a/4,a的最大值为32768,代入计算可以发现执行的最大次数为134217728次,可以对其进行优化,具体优化思路:仅使用for循环来实现,循环变量为兔子的数量i,那么鸡的脚数就为(a-4*i),如果鸡脚数能被2整除(对2取余为0),这时该解为一种可能的值分别和最大值最小值进行比较并修改,只有一层循环,循环执行的最大次数为a/4,即8192次。具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main() {int a;//定义动物脚总数变量acin>>a;//输入a的值int maxv=0,minv=32768;//定义动物总数最大值变量maxv并初始化为0、最小值变量 minv并初始化为32768for(int i=0; i<=a/4; i++) { //定义循环变量i控制兔子的个数,从0到a/4int j = a - 4*i;//定义鸡脚总数j,并赋值if(j%2==0) { //如果鸡脚总数j能被2整除if(i+j/2>maxv) { //判断当前鸡的个数加兔子的个数是都比最大值大,如果大,则更新最大值 maxv = i+j/2;}if(i+j/2<minv) { //判断当前鸡的个数加兔子的个数是都比最小值小,如果小,则更新最小值 minv = i+j/2;}}}if(maxv>0) { //判断是否有符合条件的解,maxv不为初始值,表明有解cout<<minv<<" "<<maxv<<endl;} else { //否则无解,输出0 0cout<<0<<" "<<0<<endl;}return 0;
}

此题还可以继续优化,如果存在合理的解,那么脚的总数a一定是偶数,要想动物数量多,那么脚一定是越少越多,由于鸡的脚是2只,所以笼子里面全部为鸡时,动物最多,即maxv等于a/2;同理,要想动物数量最少,那么脚一定是越多越小,由于兔子的脚是4只,所以笼子里面全部为兔子时,动物最少,这时必须满足a能被4整除,即a%4的值为0,如果不为0,那么除了兔子还有鸡,这时可以将2只脚给了鸡,剩余的全部为兔子,那么兔子的总数为(a-2)/4,所以最小值有两种情况,a能被4整除,minv为a/4,否则为(a-2)/4+1。具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main() {int a;//定义动物脚总数变量acin>>a;//输入a的值int maxv=0,minv=32768;//定义动物总数最大值变量maxv并初始化为0、最小值变量 minv并初始化为32768if(a%2==0){//如果a是偶数,动物最大值为a/2 maxv = a/2;//全部为鸡 }if(a%4==0){//如果a能被4整除 minv = a/4; //全部为兔子}else{minv = (a-2)/4+1;//一只鸡,剩余的为兔子}if(maxv>0) { //判断是否有符合条件的解,maxv不为初始值,表明有解cout<<minv<<" "<<maxv<<endl;} else { //否则无解,输出0 0cout<<0<<" "<<0<<endl;}return 0;
}

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

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

相关文章

web 开发全局覆盖文件上传身份验证漏洞利用

全局覆盖 首先认识全局变量和局部变量 再一个就是知道全局变量是全局使用的并且有个特点就是可以覆盖 这个就是全局变量我们输出一下发现 z居然等于函数内的计算值 把我们原来定义的全局变量 $z给覆盖了 看一下局部变量 这个时候 z就不会被覆盖 <?php $x1; $y2; …

No.2十六届蓝桥杯备战|练习题4道|数据类型|字符型|整型|浮点型|布尔型|signed|unsigned(C++)

B2002 Hello,World! - 洛谷 #include <iostream> using namespace std; int main() { cout << "Hello,World!" << endl; return 0; }打印飞机 #include <iostream> using namespace std;int main() {cout << " …

46. Three.js案例-创建颜色不断变化的立方体模型

46. Three.js案例-创建颜色不断变化的立方体模型 实现效果 知识点 Three.js基础组件 WebGLRenderer THREE.WebGLRenderer是Three.js提供的用于渲染场景的WebGL渲染器。它支持抗锯齿处理&#xff0c;可以设置渲染器的大小和背景颜色。 构造器 antialias: 是否开启抗锯齿&am…

5.系统学习-PyTorch与多层感知机

PyTorch与多层感知机 前言PyTroch 简介张量&#xff08;Tensor&#xff09;张量创建张量的类型数据类型和 dtype 对应表张量的维度变换&#xff1a;张量的常用操作矩阵或张量计算 Dataset and DataLoaderPyTorch下逻辑回归与反向传播数据表格 DNN&#xff08;全连结网络&#x…

WPF中的Microsoft XAML Behaviors包功能详解

什么是XAML Behaviors(行为) XAML Behaviors 提供了一种简单易用的方法&#xff0c;能以最少的代码为 Windows UWP/WPF 应用程序添加常用和可重复使用的交互性。 但是Microsoft XAML Behaviors包除了提供常用的XAML Behaviors之外&#xff0c;还提供了一些Trigger&#xff08…

运维人员的Go语言学习路线

以下是一份更为详细的适合运维人员的Go语言学习路线图&#xff1a; 一、基础环境搭建与入门&#xff08;第 1 - 2 周&#xff09; 第 1 周 环境搭建 在本地开发机和常用的运维服务器环境&#xff08;如 Linux 系统&#xff09;中安装 Go 语言。从官方网站&#xff08;https://…

设置虚拟机设备的dp和pt

虚拟机有设置px的方式&#xff0c;没有设置dp的方式&#xff0c;举个例子比如设置px为1080*1920虚拟机是有的 此时如果需要375dp宽度的虚拟机&#xff0c; 需要以下步骤 通过日志打印px和density&#xff0c;计算出当前的dp根据density和dp&#xff0c;计算如果需要相应的dp需…

Soildstate渗透测试

第一步&#xff1a;信息收集 Arp-scan -l 扫描本地存活ip&#xff0c;发现可疑ip 192.168.52.140 使用nmap -T4 -sV -sC -p- 192.168.52.140 对目标进行全端口扫描 同时使用dirb和dirsearch对目标网址进行目录爆破&#xff0c;这些网址都可以点进去看看进行一下信息收集看看是…

HTTP cookie与session

telnet命令 telnet 是一个网络协议&#xff0c;用于通过 TCP/IP 网络进行远程登录到服务器。它允许用户在本地计算机上通过网络连接到远程服务器&#xff0c;并在服务器上执行命令 telnet [主机名或IP地址] [端口号]//连接服务器 在 telnet 会话中&#xff0c;Ctrl] 会将你从…

【新年特辑】使用 React + TypeScript 开发新年祝福网页

&#x1f389; 新年将至&#xff0c;我决定开发一个独特的新年祝福网页&#xff0c;让每个人都能创建和分享自己的新年祝福。本文将详细介绍这个项目的开发过程&#xff0c;从技术选型到具体实现&#xff0c;希望能给大家一些启发。 一、项目概述 1.1 项目背景 在这个数字化的…

jmeter分布式启动

https://www.cnblogs.com/qtclm/p/11082081.html 1、代理机&#xff1a;输入“ipconfig”&#xff0c;找到IP地址&#xff0c;在Jmeter/bin/jmeter.properties设置remote host 启动jmeter server 1、控制机&#xff1a;输入“ipconfig”&#xff0c;找到IP地址&#xff0c;在J…

sqoop将MySQL数据导入hive

使用脚本加载数据 MySQL有一张表 hive创建一张相同的表 编写脚本同步数据 [rootmaster sqoop]# vim stu.sh#!/bin/bash SQOOP/usr/local/soft/sqoop-1.4.6/bin/sqoop $SQOOP import --connect jdbc:mysql://192.168.67.100:3306/sqoop \--username root \--password 123456 \-…

【从零开始入门unity游戏开发之——C#篇39】C#反射使用——Type 类、Assembly 类、Activator 类操作程序集

文章目录 前言一、前置知识1、编译器2、程序集&#xff08;Assembly&#xff09;3、元数据&#xff08;Metadata&#xff09; 二、反射1、反射的概念2、反射的作用3、反射的核心Type 类3.1 Type 类介绍3.2 不同方法获取 Type3.3 获取type类型所在的程序集的相关信息 4、反射的常…

【MyBatis源码分析】Spring与MyBatis整合深入解析

&#x1f3ae; 作者主页&#xff1a;点击 &#x1f381; 完整专栏和代码&#xff1a;点击 &#x1f3e1; 博客主页&#xff1a;点击 文章目录 概述SqlSessionFactoryBean详解配置原理 MapperScannerConfigurer 源码分析介绍postProcessBeanDefinitionRegistry 方法 概述 MyBat…

微信小程序几种数据通信方式记录

在微信小程序开发中&#xff0c;组件间的数据传递是一个常见的需求。以下是不同组件间数据传递的方式&#xff0c;根据传递的方向&#xff08;父子、兄弟、跨层级等&#xff09;提供了多种方法。 1. 父组件向子组件传递数据 通过 properties&#xff08;组件属性&#xff09;&…

使用JMeter对Linux生产服务器进行压力测试

安装 JMeter wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.1.tgz tar -xzf apache-jmeter-5.4.1.tgz cd apache-jmeter-5.4.1创建 JMeter 脚本 设置中文 选择Options—>Choose Language—>选择其他语言&#xff08;例如&#xff1a;Chinese&am…

STM32-笔记20-测量按键按下时间

1、按键按下的时间-思路 我们先检测下降沿信号&#xff0c;检测到以后&#xff0c;在回调函数里切换成检测上升沿信号&#xff0c;当两个信号都检测到的时候&#xff0c;这段时间就是按键按下的时间&#xff0c;如图所示&#xff1a;>N*(ARR1)CCRx的值 N是在这段时间内&…

2024年12月CCF-GESP编程能力等级认证Scratch图形化编程四级真题解析

本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(共 10 题,每题 2 分,共 30 分) 第 1 题 2024 年 10 月 8 日,诺贝尔物理学奖“意外地”颁给了两位计算机科学家约翰霍普菲尔德(John J. Hopfie…

常见协议的高危软件漏洞信息

HTTP 协议 协议 | 软件 | 漏洞编号 | 漏洞描述 Apache Log4j CVE-2021-45105 | Apache Log4j拒绝服务攻击漏洞 XWiki Platform CVE-2023-26477 | XWiki Platform存在安全漏洞&#xff0c;该漏洞源于可以通过URL请求参数结合其他参数注入任意脚本宏 Microsoft Windows CVE-20…

CPT203 Software Engineering 软件工程 Pt.2 敏捷方法和需求工程(中英双语)

文章目录 3. Aglie methods&#xff08;敏捷方法&#xff09;3.1 Aglie methods&#xff08;敏捷方法&#xff09;3.1.1 特点3.1.2 优点3.1.3 缺点3.1.4 原则3.1.5 计划驱动与敏捷方法的对比 3.2 Scrum3.2.1 Scrum roles3.2.2 Scrum Activities and Artifacts3.2.2.1 Product B…