有手就会 --CSP-S2019格雷码
2025-09-10 23:27:06
发布于:上海
28阅读
0回复
0点赞
最水的一集 但是不开unsigned long long 见祖宗
其实就是一个转二进制的题目。
首先观察0~3的格雷码和对应数字的二进制
数字 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
格雷码 | 00 | 01 | 11 | 10 |
二进制 | 00 | 01 | 10 | 11 |
好像已经能看出一丝规律了
再看看0~7
数字 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
格雷码 | 000 | 001 | 011 | 010 | 110 | 111 | 101 | 100 |
二进制 | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
规律已经呼之欲出了
没错,通过简单的观察发现
当原先数字第i位为1时,下一位取反(1变0,0变1)
于是就能愉快的写出正确代码了。
#include <bits/stdc++.h>
using namespace ::std;
int main(){
int n;
unsigned long long k;
cin>>n>>k;
int a[n+1];
int cnt=0;
for(int i=0;i<n;i++){
a[i]=k%2;
k/=2;
}
cout<<a[n-1];
for(int i=n-2;i>=0;i--){
if(a[i+1]==1)cout<<(!a[i]);
else cout<<a[i];
}
return 0;
}
全部评论 1
顶
2025-09-13 来自 上海
0
有帮助,赞一个