鱼C论坛

 找回密码
 立即注册
查看: 1023|回复: 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
8
输出 #1
Yes
输入 #2
14
输出 #2
No
输入 #3
65536
输出 #3
Yes

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

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

答案与解析
游客,如果您要查看本帖隐藏内容请回复
[/hide]
最佳答案
2023-8-25 18:31:13
#include<bits/stdc++.h>
using namespace std;
int main(){
        long long number,k = 1;
        cin>>number;
        if(number % 2 == 1){
                cout<<"No";
                return 0;
        }
        else{
                while(pow(2,k) <= number){
                        if(pow (2,k) == number){
                                cout<<"Yes";
                                return 0;
                        }
                        k++;
                }
        }
        cout<<"No";
    return 0;
}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> 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代码实现:
def is_2_number(x):
    if x == 0:
        return "Yes"
    else:
        while x > 1:
            if x % 2 != 0:
                return "No"
            x //= 2
        return "Yes"

# 测试示例
print(is_2_number(18))  # 输出: Yes
print(is_2_number(214))  # 输出: No
print(is_2_number(365536))  # 输出: Yes

希望对你有所帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> 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数"。

以下是具体的代码实现:
def is_power_of_two(x):
    k = 0
    while True:
        power_of_two = 2 ** k
        if power_of_two == x:
            return "Yes"
        elif power_of_two > x:
            return "No"
        k += 1

x = int(input())
print(is_power_of_two(x))

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

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

该代码的时间复杂度为O(logx),其中x是输入的数。因为我们需要不断计算2的幂,直到计算结果等于x或者超过x为止。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 18:31:13 | 显示全部楼层    本楼为最佳答案   
#include<bits/stdc++.h>
using namespace std;
int main(){
        long long number,k = 1;
        cin>>number;
        if(number % 2 == 1){
                cout<<"No";
                return 0;
        }
        else{
                while(pow(2,k) <= number){
                        if(pow (2,k) == number){
                                cout<<"Yes";
                                return 0;
                        }
                        k++;
                }
        }
        cout<<"No";
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

x = int(input())
if is_power_of_two(x):
    print("Yes")
else:
    print("No")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 18:36:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 06:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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