问题:

给定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++;
            }
        }
    }
}