集合Gk表示这样一堆数字,该集合内的数字有k个1
Posted 令狐葱dennis
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合Gk表示这样一堆数字,该集合内的数字有k个1相关的知识,希望对你有一定的参考价值。
问题描述
集合Gk表示这样一堆数字,该集合内的数字有k个1。比如,G1 = { 1, 10, 100, 1000, ...} G2 = {11, 110, 1110 }, ... , Gk { ... }
给定一个数字,找出该数属于哪一个集合,并且返回该数在集合中的下标。
输入:6 = 110
输出:2
代码实例
#include <stdio.h>
#include <limits.h>
long rankInGk(long n)
{
long index = -1;
long num1 = 0;
long np = n;
while(np) {
num1++;
np = np & (np - 1);
}
printf("%ld\n", num1);
long i;
for (i = 0; i < LONG_MAX; i++) {
long numm1 = 0;
long icp = i;
while (icp) {
numm1++;
icp = icp & (icp - 1);
}
if (numm1 == num1) {
index++;
if (i == n){
return index;
}
}
}
return index;
}
int main(int argc, char *argv[])
{
long res;
long _n;
scanf("%ld", &_n);
res = rankInGk(_n);
printf("res:%ld\n", res);
return 0;
}
以上是关于集合Gk表示这样一堆数字,该集合内的数字有k个1的主要内容,如果未能解决你的问题,请参考以下文章
6041 I Curse Myself(点双联通加集合合并求前K大) 2017多校第一场