import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Solution s = new Solution(); s.doBefore(); Scanner sc = new Scanner(System.in); int t = sc.nextInt(); for(int i = 0; i < t; i++) { int n = sc.nextInt(); s.getResult(n); } sc.close(); } } class Solution { public ArrayList<int[]> curResult = new ArrayList<int[]>(); // public boolean mark = false; public void doBefore() { int last = 0; for(int i = 1; i <= 100000; i++) { if(f(i) == g(i)) { int[] arr = {i, ++last}; curResult.add(arr); } } } public void getResult(int n) { int result = 1; for(int i = 0; i < curResult.size(); i++) { if(curResult.get(i)[0] <= n) { result = curResult.get(i)[1]; } else break; } System.out.println(result); } // int curMostClosed = 1; // int result = 1; //当前结果是0; // // if (mark) { // for (int k : curResult.keySet()) { // if (k > curMostClosed && k <= n) { // curMostClosed = k; // } // } // result = curResult.get(curMostClosed); // } // mark = true; // // for(int i = curMostClosed + 1; i <= n; i++) { // if(f(i) == g(i)) // result++; // } // curResult.put(n, result); // // System.out.println(result); // } private int f(int n ) { int result = 0; while(n != 0) { result += n % 10; n /= 10; } return result; } private int g(int n ) { int result = 0; while(n != 0) { result += (n & 1) == 1 ? 1 : 0; n >>>= 1; } return result; } }
点赞 评论

相关推荐

小浪_Coding:1. 个人技能排版太乱, 写的技术栈太浅了, 跟测试,自动化相关的太少; 2. 项目开发类的太简单没有亮点, 算法类的项目建议只放一个,最好有自动化,CI/CD, pipline的项目, 需要更换; 3.整体排版需要优化, SOOB打招呼都需要注意等.
我的简历长这样
点赞 评论 收藏
分享
01-12 09:24
门头沟学院 Java
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务