湘大 XTU OJ 1308 比赛 题解:循环结束的临界点+朴素模拟

一、链接

比赛

二、题目

题目描述

n个人要进行比赛,比赛规则如下:

  1. 假设每轮比赛的人是m,取最大的kk=2^t且k≤m。这k个人每2人举行一场比赛,胜利者进入一下轮,失败者被淘汰。
  2. 余下的m-k个人,不进行比赛,直接进入下一轮
  3. 直到决出冠军,比赛结束

比如有5个人参加比赛,第一轮举办2场,剩余3人进入第二轮,第二轮1场,剩余2人进入第三轮,第三轮举办1场决出冠军,所以一共要办4场比赛。 请问一共要举行几轮多少场比赛?

输入

第一行是一个整数K,表示样例的个数。 以后每行一个样例,为n(1≤n≤1000000000)

输出

每行输出两个整数,轮数和比赛场数,中间用一个空格隔开。

样例输入

2
1
5

样例输出

0 0
3 4

三、题意

有n个人进行比赛,最后只剩下一个人,输出比赛轮数和比赛场数,需要找到最大的小于总人数n的2的指数函数的值k

四、代码

c++

#include<iostream>using namespace std;int main()
{int t;//表示样例数scanf("%d",&t);while(t--){int n,k=1,a=0,b=0;//n表示总人数,k表示最接近n的2的指数函数的值//a表示轮数,b表示场数scanf("%d",&n);if(n<2)	printf("0 0\n");//只剩下一个人,就不需要比较,特判else{while(n>1)//只要不是剩下一个人,就一直循环{while(k<n)	k*=2;//寻找最接近n的2的指数函数的值if(k!=n)	k/=2;//跳出上面循环会多乘一次,所以除掉一个2//当然,k==n不算多乘了一次,条件判断if(k>n)也是可以的a++;//每一次算一轮b+=k/2;//比赛进行k/2场n-=k/2;//淘汰k/2个人}printf("%d %d\n",a,b);}}return 0;
}

c语言

#include<stdio.h>int main()
{int t;scanf("%d",&t);while(t--){int n,k=1,a=0,b=0;scanf("%d",&n);if(n<2)	printf("0 0\n");else{while(n>1){while(k<n)	k*=2;if(k>n)	k/=2;a++;b+=k/2;n-=k/2;}printf("%d %d\n",a,b);}}return 0;
}

五、总结

1.怎么找到最大的小于总人数n的2的指数函数数值k:使用一个循环,让k从1开始循环,每一次循环把k乘以2,一直到k大于n的时候跳出循环

while(k<n)	k*=2;

这个时候需要注意一个特判:如果两个数字相等怎么办(如果总人数n是偶数)?好吧,其实是因为我审题的时候没有仔细,题目说了是k<=m,意思也就是说等于也是可以的,当然我们模拟发现也是可以的......(多此一举了) 

#include<iostream>using namespace std;int main()
{int t;//表示样例数scanf("%d",&t);while(t--){int n,k=1,a=0,b=0;//n表示总人数,k表示最接近n的2的指数函数的值//a表示轮数,b表示场数scanf("%d",&n);if(n<2)	printf("0 0\n");//只剩下一个人,就不需要比较,特判else{while(n>1)//只要不是剩下一个人,就一直循环{while(k<=n)	k*=2;//寻找最接近n的2的指数函数的值k/=2;//跳出上面循环会多乘一次,所以除掉一个2//当然,k==n不算多乘了一次,条件判断if(k>n)也是可以的a++;//每一次算一轮b+=k/2;//比赛进行k/2场n-=k/2;//淘汰k/2个人}printf("%d %d\n",a,b);}}return 0;
}

改成这样甚至不用再多加一个条件判断,可以肯定多乘了一次2,所以直接除以一次2即可,这个就是跳出循环的临界条件,只有k>n才会跳出循环,但是这个时候k是不满足条件的,所以需要回退一次,也就是除以2

 2.轮数,场数,总人数之间的关系是什么?

每一轮需要算出一个小于等于总人数n的一个最大的2的指数函数数值k

每一轮需要进行k/2场比赛

每一轮需要淘汰k/2个人

不断地更新轮数,场数,总人数,不大于总人数的最大的2的指数函数数值k即可

3.比赛最后只要留下一个冠军,也就是说总人数等于1是结束的标识,跳出循环的临界条件

六、精美图片

 

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

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

相关文章

解决无法引入 mysql-connector-j 的问题

开发环境 Windows 10Oracle JDK 1.8Maven 3.8.8IntelliJ IDEA 2022.2.2 问题 在使用 Spring initializr 创建 Spring Boot 项目时&#xff0c;无法引入 mysql-connector-j 这个依赖&#xff0c;报错信息&#xff1a; com.mysql:mysql-connector-j:jar:unknown was not foun…

web-vue

<html><head><title>永远朋友</title><script src"../js/vue.js"></script></head><body><div id "app"><input type"text" v-model"message">{{ message }}</div&g…

【自动化测试】概述了解

文章目录 一、了解自动化测试二、工具的配合使用三、补充 努力经营当下 直至未来明朗&#xff01; 一、了解自动化测试 自动化测试主要是UI自动化以及接口自动化。功能测试与UI自动化测试的相似度是最高的&#xff0c;当功能测试转型自动化测试的时候一般最先接触的是UI自动化…

mysql延时问题排查

背景介绍 最近遇到一个奇怪的问题&#xff0c;有个业务&#xff0c;每天早上七点半产生主从延时&#xff0c;延时时间12.6K&#xff1b; 期间没有抽数/备份等任务&#xff1b;查看慢日志发现&#xff0c;期间有一个delete任务&#xff0c;在主库执行了161s delete from xxxx_…

SD-MTSP:光谱优化算法LSO求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、光谱优化算法LSO 光谱优化算法&#xff08;Light Spectrum Optimizer&#xff0c;LSO&#xff09;由Mohamed Abdel-Basset等人于2022年提出。 参考文献&#xff1a; [1]Abdel-Basset M, Mohamed R, Sallam KM, Chakrabortty RK. Light Spectrum Optimizer: A Novel Physi…

Java的集合

集合 可以动态保存任意多个对象&#xff0c;使用比较方便 提供了一系列方便的操作对象的方法: add、remove、set、get 等&#xff0c;添加/删除新元素简洁了 Java 的集合类很多&#xff0c;主要分为两大类 Collection 和 Map Collection 接口有两个重要的子接口List Set , 他…

深眸科技|发现AI+3D视觉的价值,技术升级加速视觉应用产品国产替代

随着中国工业化进程的不断深入和智能制造浪潮的影响&#xff0c;工业生产对于机器视觉技术的需求不断攀升&#xff0c;其应用范围覆盖了工业领域的众多行业&#xff0c;包括3C电子、汽车、半导体、新能源、物流等。 据GGII发布的最新数据显示&#xff0c;近年来我国机器视觉市…

最强自动化测试框架Playwright(4)-上下文及窗口处理

browser.new_context() 创建一个新的浏览器上下文。它不会与其他浏览器上下文共享 cookies/缓存。 context之间是相互隔离的&#xff0c;可以理解为轻量级的浏览器实例 多浏览器窗口 创建一个context相当于打开一个新的浏览器窗口 如下代码打开两个浏览器窗口&#xff1a; …

JavaScript面试题(一)

1、解释一下什么是闭包 ? 闭包&#xff1a;就是能够读取外层函数内部变量的函数。 闭包需要满足三个条件&#xff1a; 访问所在作用域&#xff1b; 函数嵌套&#xff1b; 在所在作用域外被调用 。 优点&#xff1a;可以重复使用变量&#xff0c;并且不会造成变量污染 。 …

通达OA SQL注入漏洞【CVE-2023-4165】

通达OA SQL注入漏洞【CVE-2023-4165】 一、产品简介二、漏洞概述三、影响范围四、复现环境POC小龙POC检测工具: 五、修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损…

029 - integer types 整数类型

MySQL支持SQL标准整数类型 INTEGER&#xff08;或INT&#xff09;和 SMALLINT。作为一个可扩展标准&#xff0c;MySQL也支持整数类型 TINYINT&#xff0c;MEDIUMINT和 BIGINT。下表显示了每种整数类型所需的存储空间和范围。 表11.1 MySQL支持的整数类型的必需存储和范围 类型…

电脑麦克风没声音?

这3招就可以解决&#xff01; 在我们使用电脑录制视频时&#xff0c;有时会遇到一个令人头疼的问题&#xff1a;麦克风没有声音。那么&#xff0c;为什么会出现这种情况呢&#xff1f;更重要的是&#xff0c;我们应该如何解决这个问题呢&#xff1f;本文将介绍3种方法&#xf…

【钉钉接口】bpms_task_change、bpms_instance_change 的区别及举例

bpms_task_change&#xff1a;审批任务回调&#xff0c;是针对审批任务状态的推送。如审批人执行审批、审批人转交审批等针对具体某个审批节点的操作&#xff0c;属于 bpms_task_change 事件类型。bpms_instance_change&#xff1a;审批实例回调&#xff0c;是针对审批实例状态…

内生性的蒙特卡罗模拟

这是一个很好的例子,通过蒙特卡洛模拟展示了忽略相关变量时,回归系数估计的偏差。 %% 蒙特卡洛模拟&#xff1a;内生性会造成回归系数的巨大误差 times 300; % 蒙特卡洛的次数 R zeros(times,1); % 用来储存扰动项u和x1的相关系数 K zeros(times,1); % 用来储存遗漏了x2…

数据结构和算法三(排序)

列表排序 排序类型&#xff1a; 一、冒泡排序&#xff1a; 屏幕录制2023-07-25 13.05.12 def bubble_sort(li):exchangeFalseif len(li)<1:return lifor i in range(len(li)-1):for j in range(len(li)-i-1):if li[j]>li[j1]:li[j],li[j1]li[j1],li[j]print(li)exchangeT…

【C语言学习】函数原型

函数原型 代码一 #include<stdio.h> void sum(int begin, int end) {int i;int sum 0;for(ibegin; i<end; i){sum sum i;}printf("%d到%d的和是%d\n", begin, end, sum); }int main() {sum(1,10);sum(20,30);sum(40,50);return 0; }代码二&#xff08;函…

【黑马头条之xxl-Job分布式任务调度】

本笔记内容为黑马头条项目的分布式任务调度热点文章部分 目录 一、今日内容 1、需求分析 2、实现思路 3、定时计算 4、定时任务框架-xxljob 二、分布式任务调度 1、什么是分布式任务调度 2、xxl-Job简介 3、XXL-Job-环境搭建 4、配置部署调度中心-docker安装 5、xx…

C#实现邮箱验证码

开发环境&#xff1a;C#&#xff0c;VS2019&#xff0c;.NET Core 3.1&#xff0c;ASP.NET Core Web API&#xff0c;163邮箱 1、在163邮箱的设置中开通IMAP/SMTP的服务&#xff0c;授权成功后会弹出一个窗体&#xff08;如下图所示&#xff09;&#xff0c;上面显示了授权密码…

【数据可视化】(二)数据探索组件

目录 0.简介 一、数据模式与数据组织 1、数据的定义 2、数据库的定义 3、什么是数据模式? 4、数据模式举例 5、什么是数据纲要? 6、数据组织的层次 二、矢量数据 1、什么是矢量数据?

docker 容器中执行命令出现错误: 13: Permission denied

错误 13: Permission denied [rootVM-32-11-tencentos ~]# docker exec -it kibana1 /bin/bash kibana76c20c215dcb:~$ apt-get install vi E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied) E: Unable to acquire the dpkg frontend…