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

京公网安备 11010502036488号