问题
1212: 核电站问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 725 解决: 435
一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续3个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。现在,请你计算:对于给定的N,求不发生爆炸的放置核物质的方案总数。
输入
输入文件只有多行,每行对应一个正整数N<=40;
输出
输出文件有多行,每行只有一个正整数,表示方案总数
样例输入 Copy
1
2
3
4
10
样例输出 Copy
2
4
7
13
504
小白的代码
二进制模拟
我自己用的方法,折腾了三个多小时!!!
n个坑,当成n个二进制位
放弹为1,不放蛋为0
…
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int N;
int cnt; // 符合要求的二进制数
int rep = 0; // 用一个数的二进制 0 和 1 的情况来模拟有无放核弹, rep来记录连续的 1 的个数
while(cin >> N) {
cnt = 0; //
int num;
int findThreeBomb;
int bitDigi;
// int index; // 使用滑动窗口,检测一个窗口里的3个坑是否都是1
num = pow(2, N); // N 个二进制坑都装了1,代表的值为 pow(2, N + 1) - 1
for (int j = 0; j < num; j++) {
// rep = 0;
findThreeBomb = 0; // 标记 3 个连续 1
// index = -1;
bitDigi = 7; // 初始化
for (int i = 0; i < N; i++) {
if (i > 2) bitDigi = (7 << (i - 2)); // 3 个 111(对应10进制中的7)
else bitDigi = 7