- 简单斐波那契
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
int n;
cin>>n;
int f[50];//用数组存储数列每一项的值
f[1]=0;
f[2]=1;
for(int i=3;i<50;i++){
f[i]=f[i-1]+f[i-2];
}
for(int i=1;i<=n;i++)
cout<<f[i]<<" ";
}
- 递归实现排列型枚举
#include<bits/stdc++.h>
using namespace std;
int n;
bool vis[10];
int path[11];
void dfs(int x){
//数字填完了,输出
if(x>n){//不能写x==n
for(int i=1;i<=n-1;i++)
cout<<path[i]<<" ";
cout<<path[n]<<endl;
}
//空位上可以选择的数字为:1 ~ n
for(int i=1;i<=n;i++){
if(!vis[i]){ //没被使用
vis[i]=true;//标记为使用
path[x]=i;//放入空位
dfs(x+1);//去下一位遍历n个数
vis[i]=false;//回溯,标记为未使用 (恢复现场)
}
}
}
int main(){
cin>>n;
dfs(1); //从第1位开始dfs 到第n+1位返回
return 0;
}
i的第k位是不是1
i>>k&1
移位
1 i右移移1位
&1 取出个位数字
右移k位(相当于到了个位)
例:判断二进制第1位表示是不是1:
i>>1&1
1 1 0 1 0>>1&1
4 3 2 1 0 位数
高位→低位
11010右移1位后为1101
&1判断是不是1