十进制转换二进制,求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++; } } } }