11,799
社区成员




给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中,数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。
以下程序实现了这一功能,请你补全空白处内容:
- #include<stdio.h>
- #include<stdlib.h>
- int oneNum(int x)
- {
- int cnt = 0;
- while(x)
- {
- ____________;
- }
- return cnt;
- }
- int cmp(const void *a,const void*b)
- {
- int al,bl;
- int ret;
- al = *(int*)a;
- bl = *(int*)b;
- ret = oneNum(al) - oneNum(bl);
- return ret ? ret : al - bl;
- }
- int main()
- {
- int s[]={1,2,3,5,6,7,8},i;
- int len = sizeof(s)/sizeof(*s);
- qsort(s,len,4,cmp);
- for(i = 0 ; i < len ; i++)
- {
- printf("%d\n",s[i]);
- }
- }
算数运算符比按位与优先级别高加不加括号不是一样的吗?
用matlab很简单,调用一个函数即可
(int)a友友们我想问下这个是什么意思?