当前位置: 首页 > news >正文

数字诗意(java)

这道题是一道规律

1到10 中是不是只有3 5 6 7 9 10 

满足规律,你说对吧

那我们来看不满足规律的有那些呢

是不是1 2  4 8 等等

你发现什么了是不是所有的2 的幂次方都不满足

只要不是2  的幂次方就都是合法的数字

ok思路有了那我们怎么来判断输入的某一个数是不是2 的整数次幂呢?

我一开始的思路不太对

我想的是用一个数组来存储2的0次幂到2 的17次幂的大小

然后来个循环

对每一个输入的数都进行判断只有等于数组中的一个就跳出循环然后cnt++

但是不知到为啥答案错误了


emm

感觉没问题,但是只能拿到30%

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Scanner;
import java.util.StringTokenizer;

/**
 * @author zb
 * date2025/3/30 18:19
 */
public class Main {
    static  long binary[] = new long[18];
    public static void main(String[] args) {
//        System.currentTimeMillis();
//        Scanner in  = new Scanner(System.in);
        for (int i = 0; i <=17 ; i++) {
            binary[i] = (long) Math.pow(2,i);
        }
        long n  = in.nextLong();
        long cnt = 0;
       while (n-->0){
           int flage = 0;
           long num = in.nextLong();
           for (int i = 0; i <=17 ; i++) {
               if(num==binary[i]){
                   flage = -1;
                   break;
               }
           }
           if(flage==-1){
               cnt++;
           }
       }
        out.println(cnt);
       out.flush();

//        in.close();
    }
    static  FastReader in =new FastReader();
    static PrintWriter out = new PrintWriter(System.out);
    static class FastReader{
        static BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
        static StringTokenizer st = new StringTokenizer("");
          String next(){

             while (!st.hasMoreElements()){
                 try {
                   st =new StringTokenizer(br.readLine());
                 } catch (IOException e) {
                     throw new RuntimeException(e);
                 }

             }
             return st.nextToken();
        }
        int nextInt(){
             return Integer.parseInt(next());
        } double nextDouble(){
             return Double.parseDouble(next());
        }
        long nextLong(){
             return Long.parseLong(next());
        }




    }

}

下面是正确的



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Scanner;
import java.util.StringTokenizer;

/**
 * @author zb
 * date2025/3/30 18:19
 */
public class Main {
    static  long binary[] = new long[18];
    public static void main(String[] args) {
//        System.currentTimeMillis();
//        Scanner in  = new Scanner(System.in);
        for (int i = 0; i <=17 ; i++) {
            binary[i] = (long) Math.pow(2,i);
        }
        long n  = in.nextLong();
        long cnt = 0;
       while (n-->0){
           int flage = 0;
           long num = in.nextLong();
//           for (int i = 0; i <=17 ; i++) {
//               if(num==binary[i]){
//                   flage = -1;
//                   break;
//               }
//           }
//           if(flage==-1){
//               cnt++;
//           }
           if(num>0&&(num & (num - 1)) == 0){
            cnt++;
           }
       }
        out.println(cnt);
       out.flush();

//        in.close();
    }
    static  FastReader in =new FastReader();
    static PrintWriter out = new PrintWriter(System.out);
    static class FastReader{
        static BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
        static StringTokenizer st = new StringTokenizer("");
          String next(){

             while (!st.hasMoreElements()){
                 try {
                   st =new StringTokenizer(br.readLine());
                 } catch (IOException e) {
                     throw new RuntimeException(e);
                 }

             }
             return st.nextToken();
        }
        int nextInt(){
             return Integer.parseInt(next());
        } double nextDouble(){
             return Double.parseDouble(next());
        }
        long nextLong(){
             return Long.parseLong(next());
        }




    }

}

 这一段是核心代码

x如果是2的整数幂次方,那么

x的二进制数 肯定是1 开头后面都是0 

而x-1则相反
x-1 的二进制数是0开头后面都是1 

你想一下

如果一下数再加一就是2 的整数次幂

那么他是不是再加1 就变成最前面是1 后面都是0 

比如

2 的5次方对应的二进制数

100000

2的5次方对应的二进制数-1 

是不是

011111

两者进行位运算与 &

是不是就是0 

   if(num>0&&(num & (num - 1)) == 0){
            cnt++;
           }

相关文章:

  • 基于FPGA的ESP8266无线数据传输(温湿度DTH11、光照强度BH1750、WIFI模块)连接中国移动onenet云平台,仿真+上板通过+可视化平台搭建
  • RCE复现
  • 深度学习查漏补缺:3.从 Sigmoid 到 GELU
  • 【LeetCode Solutions】LeetCode 101 ~ 105 题解
  • 加载MiniLM-L12-v2模型及知识库,调用Deepseek进行问答
  • 全面解析 Spring AOP 切入点表达式
  • 【导航定位】GNSS数据说明-RTCM
  • RabbitMQ高级特性--TTL和死信队列
  • socket演示程序3(udp)
  • 《符号之纱与血肉之躯:具身智能范式的哲学重构与AI发展新图景》
  • 透过TCP/IP看HTTP
  • 深度学习篇---模型GPU训练
  • 监控平台——SkyWalking部署
  • Spring AOP中为所有类型通知传递参数的完整示例,包含详细注释和参数传递方式
  • 【数据结构】哈夫曼树
  • 74. Linux设备树详解
  • 基于springboot课程学习与互动平台(源码+lw+部署文档+讲解),源码可白嫖!
  • SQL注入点判断数据库类型
  • 从“制造”到“智造”:生产线自动检测的技术变革与实践
  • 【力扣hot100题】(017)矩阵置零
  • 郑州网站建设 58/百度营销登录
  • 网站开发需要学习什么/网站快速推广
  • 嘉定区网站建设/如何制作网页教程
  • 手机上传网站源码/网络营销郑州优化推广公司
  • wordpress安装网站吗/域名注册 万网
  • 网站开发要什么样的环境/做网站多少钱