zhangjinxuan 发表于 2023-8-25 18:12:29

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



梦想星际舰队第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

答案与解析
**** Hidden Message *****

陶远航 发表于 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


希望对你有所帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 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为止。

香蕉那个不拿拿 发表于 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;
}

Ewan-Ahiouy 发表于 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")

陈尚涵 发表于 2023-8-25 18:36:28

{:10_257:}
页: [1]
查看完整版本: 梦想星际舰队第22关 && FCOI #9 第三题2数题解【原创】