2017年大疆在线编程第一题

题目描述:

给出n(n<1000)个数,求任意两个数之间二进制表示的位数不同的数量之和。

PS:在考试的时候根本没有读懂这个题的意思。感觉换成这样的表述更合适:

求任意两个数的二进制表示之间不同位数的数量之和。

输入:

0<=n<32767。 输入首先为n,然后跟随着n个数,范围[0, 4294967295]

输出:

组合数量

样例输入:

2

9

15

样例输出:

2

分析一下:比较任意两个数的二进制之间不同的位数,就让这两个数按位异或,再去统计异或运算返回值的二进制表示中1的个数,求和输出。

 1 import java.util.*;
 2 
 3 public class dji1  
 4 {
 5     public static void main(String[] args) 
 6     {
 7         Scanner sc = new Scanner(System.in);
 8         System.out.println("please input  number:");
 9         int n = sc.nextInt();
10         int[] arr = new int[n];
11         while(sc.hasNext()){
12             for (int j=0;j<n;j++ )
13             {
14                 arr[j]=sc.nextInt();
15             }
16         }
17 
18 
19         int sum =0;
20         for (int i=0;i<n-1;i++ )
21         {
22             for (int k=i+1;k<n;k++ )
23             {
24                 int tempInt = arr[i]^arr[k];
25                 sum += oneNums(tempInt);
26             }
27         }
28 
29         System.out.println(sum);
30         
31     }
32 
33     public static int oneNums(int num){  //统计一个十进制数的二进制数中1的个数。
34         int count =0;
35         while(num!=0){
36             int mod = num%2;
37             if (mod ==1)
38             {
39                 count++;
40             }
41             num /= 2;
42         }
43 
44         return count;
45     }
46     
47     
48 }
View Code

 

posted @ 2017-08-30 14:39  水中鱼的夏天  阅读(788)  评论(0编辑  收藏  举报