鱼C论坛

 找回密码
 立即注册
查看: 1460|回复: 5

[已解决]梦想星际舰队第22关 && FCOI #9 第三题2数题解【原创】

[复制链接]
发表于 2023-8-25 18:12:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


梦想星际舰队第22关 && FCOI #9 题解


第三题:2数

题目描述
一个数 x 被称之为 “2数”当且仅当存在非负整数 k 满足 2^k=x。

请判断 x 是否是 “2数”。

输入格式
一个整数 x

输出格式
一个字符串,Yes 表示这个数是“2数”,No 表示不是。

输入输出样例
输入 #1
  1. 8
复制代码

输出 #1
  1. Yes
复制代码

输入 #2
  1. 14
复制代码

输出 #2
  1. No
复制代码

输入 #3
  1. 65536
复制代码

输出 #3
  1. Yes
复制代码


数据范围
0≤x≤2^63-1

其他说明
本题目为 zhangjinxuan 原创题目。
测试链接:https://www.luogu.com.cn/problem/U330650

答案与解析
游客,如果您要查看本帖隐藏内容请回复
[/hide]
最佳答案
2023-8-25 18:31:13
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4.         long long number,k = 1;
  5.         cin>>number;
  6.         if(number % 2 == 1){
  7.                 cout<<"No";
  8.                 return 0;
  9.         }
  10.         else{
  11.                 while(pow(2,k) <= number){
  12.                         if(pow (2,k) == number){
  13.                                 cout<<"Yes";
  14.                                 return 0;
  15.                         }
  16.                         k++;
  17.                 }
  18.         }
  19.         cout<<"No";
  20.     return 0;
  21. }
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-25 18:12:49 | 显示全部楼层
对于这道题目,我们可以使用以下思路来判断一个数x是否是"2数":

1. 如果x为0,那么x是"2数",因为2^0等于1。
2. 否则,我们可以通过不断将x除以2,直到x变为1或大于1。在这个过程中,如果x的余数不为0,那么它肯定不是"2数";如果最后x变为1,那么它就是"2数"。

具体的判断方法如下:

1. 如果x等于0,输出"Yes"。
2. 否则,进行如下操作:
   1. 当x的余数不为0时,输出"No"。
   2. 当x等于1时,输出"Yes"。
   3. 将x除以2,并继续进行上述操作。

下面是一个示例的Python代码实现:

  1. def is_2_number(x):
  2.     if x == 0:
  3.         return "Yes"
  4.     else:
  5.         while x > 1:
  6.             if x % 2 != 0:
  7.                 return "No"
  8.             x //= 2
  9.         return "Yes"

  10. # 测试示例
  11. print(is_2_number(18))  # 输出: Yes
  12. print(is_2_number(214))  # 输出: No
  13. print(is_2_number(365536))  # 输出: Yes
复制代码


希望对你有所帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 18:13:11 | 显示全部楼层
根据题目描述,我们需要判断一个数x是否是"2数",即是否存在非负整数k满足2^k=x。

解决这个问题的思路是,我们可以从k=0开始,不断计算2的幂,直到计算结果等于x或者超过x为止。如果最终计算结果等于x,则说明x是"2数";如果最终计算结果超过x,则说明x不是"2数"。

以下是具体的代码实现:

  1. def is_power_of_two(x):
  2.     k = 0
  3.     while True:
  4.         power_of_two = 2 ** k
  5.         if power_of_two == x:
  6.             return "Yes"
  7.         elif power_of_two > x:
  8.             return "No"
  9.         k += 1

  10. x = int(input())
  11. print(is_power_of_two(x))
复制代码


通过上述代码,我们可以判断输入的数x是否是"2数"。如果是,则输出"Yes";如果不是,则输出"No"。

对于题目给出的样例输入8,代码输出"Yes";样例输入14,代码输出"No";样例输入65536,代码输出"Yes",与题目要求的输出一致。

该代码的时间复杂度为O(logx),其中x是输入的数。因为我们需要不断计算2的幂,直到计算结果等于x或者超过x为止。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 18:31:13 | 显示全部楼层    本楼为最佳答案   
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4.         long long number,k = 1;
  5.         cin>>number;
  6.         if(number % 2 == 1){
  7.                 cout<<"No";
  8.                 return 0;
  9.         }
  10.         else{
  11.                 while(pow(2,k) <= number){
  12.                         if(pow (2,k) == number){
  13.                                 cout<<"Yes";
  14.                                 return 0;
  15.                         }
  16.                         k++;
  17.                 }
  18.         }
  19.         cout<<"No";
  20.     return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 18:33:13 | 显示全部楼层
  1. def is_power_of_two(x):
  2.     if x <= 0:
  3.         return False
  4.     while x % 2 == 0:
  5.         x /= 2
  6.     return x == 1

  7. x = int(input())
  8. if is_power_of_two(x):
  9.     print("Yes")
  10. else:
  11.     print("No")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 18:36:28 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 08:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表