十进制转换二进制,求1的个数,相同为一类?

问题:

给定N个非负整数,将这N个数字按照二进制1的个数分类,二进制下1的个数相同的数字属于同一类,求最后一共有几类数字?

输入描述:
输入的第一行是一个正整数T(0<T<=10),
表示样例个数。对于每一个样例,第一
行是一个正整数N(0<N<=100),表示有
多少个数字。接下来一行是N个由空格分
隔的非负整数,大小不超过2^23-1
输出描述:
对于每一组的样例,输出一个正整数,表示输入的数字一共有多少类

输入:
1
5
8 3 5 7 2

输出:
3
    
题目分析:
对于这个题目说的要求有点模糊,
第一行输入的样例个数。
每一个样例,第一行一个正整数N,表示多少个数字,接下来是一行N个空格分隔的非负整数

实现代码:

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int row = sc.nextInt(); //输入第一行 也是要求多少样例
            int col = sc.nextInt(); //输入N个数对应的样例
            int num[][] = new int[row][col];
            for(int i =0; i<row;i++){
                for(int j= 0;j<col;j++){
                    num[i][j] = sc.nextInt();
                    }
                }
            for(int i = 0;i<num.length;i++){
                Set<Integer> sets = new HashSet<Integer>();
                for(int j= 0;j<num[0].length;j++){
                    int count = 0;
                    int m = num[i][j];
                    while(m>0){
                        m = m&(m-1);//这是按位运算计算二进制个数
                        count++;
                    }
                    sets.add(count);
                }
                System.out.print(sets.size()+" ");
            }
        }
    }
}
代码只通过10% 求大佬指点!




想了想应该如果是2个样例
对应的每组的个数不同才对
每一组的数不同

这个实现代码如下:

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int i = 0;
        while(sc.hasNext()){
            while(i<n){
                int m = sc.nextInt();
                int num [] = new int[m];
                Set<Integer> sets = new HashSet<>();
                for(int j=0;j<m;j++){
                    int count = 0;
                    num[j] = sc.nextInt();
                    int k = num[j];
                    while(k>0){
                        k = k&(k-1);
                        count++;
                    }
                    sets.add(count);
                }
                System.out.println(sets.size());
                i++;
            }
        }
    }
}



全部评论

相关推荐

12-20 13:19
已编辑
曲阜师范大学 Java
点赞 评论 收藏
分享
最近群里有很多同学找我看简历,问问题,主要就是集中在明年三月份的暑期,我暑期还能进大厂嘛?我接下来该怎么做?对于我来说,我对于双非找实习的一个暴论就是title永远大于业务,你在大厂随随便便做点慢SQL治理加个索引,可能就能影响几千人,在小厂你从零到一搭建的系统可能只有几十个人在使用,量级是不一样的。对双非来说,最难的就是约面,怎么才能被大厂约面试?首先这需要一点运气,另外你也需要好的实习带给你的背书。有很多双非的同学在一些外包小厂待了四五个月,这样的产出有什么用呢?工厂的可视化大屏业务很广泛?产出无疑是重要的,但是得当你的实习公司到了一定的档次之后,比如你想走后端,那么中厂后端和大厂测开的选择,你可以选择中厂后端(注意,这里的中厂也得是一些人都知道的,比如哈啰,得物,b站之类,不是说人数超过500就叫中厂),只有这个时候你再去好好关注你的产出,要不就无脑大厂就完了。很多双非同学的误区就在这里,找到一份实习之后,就认为自己达到了阶段性的任务,根本不再投递简历,也不再提升自己,玩了几个月之后,美其名曰沉淀产出,真正的好产出能有多少呢?而实际上双非同学的第一份实习大部分都是工厂外包和政府外包!根本无产出可写😡😡😡!到了最后才发现晚了,所以对双非同学来说,不要放过任何一个从小到中,从中到大的机会,你得先有好的平台与title之后再考虑你的产出!因为那样你才将将能过了HR初筛!我认识一个双非同学,从浪潮到海康,每一段都呆不久,因为他在不断的投递和提升自己,最后去了美团,这才是双非应该做的,而我相信大部分的双非同学,在找到浪潮的那一刻就再也不会看八股,写算法,也不会打开ssob了,这才是你跟别人的差距。
迷茫的大四🐶:我也这样认为,title永远第一,只有名气大,才有人愿意了解你的简历
双非本科求职如何逆袭
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务