文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。
描述 Description
这个数列是这样的:
0,1,3,2,6,7,5,4,12,13,15,14,10,11,9,8,24,25,27,26,30,31……
先仔细研究一下这个数列的规律。
现在他们请你编写一个程序,要求找出数n在此数列中的位置序号k。
输入格式 Input Format
输入数据只有一行,为数 n (n<=2^31-1)
输出格式 Output Format
输出数据只有一行,为数k。
Tip:传说中的格雷码。。。
二进制–>格雷码:从最右边一位起,依次将每一位与左边一位异或(^),作为当前格雷码的值,最左边一位不变(相当于左边是0)
格雷码–>二进制:从左边第二位起,将每位与左边一位二进制值异或(^),作为当前二进制的值,最左边一位不边(相当于左边是0)
#include <stdio.h>
int fuck(int x){
if (x==0) return 0;
else return x^fuck(x/2);
}
int main(){
int n;
scanf(“%d”,&n);
printf(“%d”,fuck(n)+1);
system(“pause”);
return 0;
}
转载请注明:Slyar Home » Vijos P1176 奇怪的数列 C语言版