数学逻辑 算法入门

没有递交-P8813  [CSP-J 2022] 乘方
没有递交-P7071  [CSP-J2020] 优秀的拆分
没有递交-P9748  [CSP-J 2023] 小苹果
没有递交-P5657  [CSP-S2019] 格雷码
没有递交-P7909  [CSP-J 2021] 分糖果
没有递交-P8814  [CSP-J 2022] 解密
没有递交-P5686  [CSP-S2019 江西] 和积和
没有递交-P7076  [CSP-S2020] 动物园
没有递交-P5682  [CSP-J2019 江西] 次大值
没有递交-P5684  [CSP-J2019 江西] 非回文串

[CSP-S2019] 格雷码 - 洛谷  看到题肯定是找规律

 #include<bits/stdc++.h>
using namespace std;
//const int maxn = 1E9;
int d[4] = {0,1,1,0};
#define ull unsigned long long 
int main(){
	ull n,k,one=1;
	cin>>n>>k;
	/*
	ull num=one<<(n-1);//如果直接写1<<(n-1)计算过程中就溢出了 
	for(int i=n-1;i>=0;i--,num>>=1){
		ull loop=k/num;
		int order=(int)(loop%4);
		printf("%d",d[order]);
	} 
	//从低到高位的特殊循环节 
	//0110第1位规律
	//00111100第2位规律 
  //i 01234567
//i/2 00112233   下标选择从0开始,/巧妙计算循环节,%4提取出来正好满足0110序列 
	//0000111111110000 第3位规律 
	*/
	for(int i=n-1;i>=0;i--){
		ull loop=k>>i;
		int order=loop&3;//3就是二进制的11,就是取后两位 
		printf("%d",d[order]);
	}
	return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值