11,607
社区成员
发帖
与我相关
我的任务
分享
给你一个整数数组 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友友们我想问下这个是什么意思?