首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大家帮忙看看下面的程序错在哪?解决方案

2012-03-02 
大家帮忙看看下面的程序错在哪?初始化一个bitset 32bv,表示一个序列1,2,3,5,8,13,21(Fibonacci)在数字的

大家帮忙看看下面的程序错在哪?
初始化一个bitset <32>   bv,表示一个序列1,2,3,5,8,13,21(Fibonacci)
在数字的位置设置bv的相应位为1


#include   "stdafx.h "
#include   <iostream>
#include   <bitset>
#include   <iomanip>
#include   <assert.h>

using   namespace   std;

void   buildFibonacci(int   f[],int   n);
void   initFibonacci(bitset <32> &   bv,int   n);
void   main()
{
bitset <32>   bv;
initFibonacci(bv,7);
for   (int   i=0;i <bv.size();++i)
{
if(bv.test(i))
cout < < "bit " < <setw(2) < <i < < "on " < <endl;
}
}
void   buildFibonacci(int   f[],int   n)
{
f[0]=1;
f[1]=2;
for(int   i=2;i <n;++i)
f[n]=f[n-1]+f[n-2];
}
void   initFibonacci(bitset <32>   &bv,int   n)
{
assert(n> 0&&n <=32);
int   f[32];
buildFibonacci(f,n);
for(int   i=0;i <n;++i)
bv.set(f[i]);
}

[解决办法]
void buildFibonacci(int f[],int n)
{
f[0]=1;
f[1]=2;
for(int i=2;i <n;++i)
f[n]=f[n-1]+f[n-2];
}
这个函数的问题,for循环中i是增加的,可你怎么拿n做下标?应该用i做数组下标,还有就是用i++,别用++i,否则第一个不是f[3]了吗。

//#include "stdafx.h "
#include <iostream>
#include <bitset>
#include <iomanip>
#include <assert.h>

using namespace std;

void buildFibonacci(int f[],int n);
void initFibonacci(bitset <32> & bv,int n);
void main()
{
bitset <32> bv;
initFibonacci(bv,7);
for (int i=0;i <bv.size();++i)
{
if(bv.test(i))
cout < < "bit " < <setw(2) < <i < < "on " < <endl;
}
}
void buildFibonacci(int* f,int n)
{
f[0]=1;
f[1]=2;
for(int i=2;i <n;i++)
f[i]=f[i-1]+f[i-2];
}
void initFibonacci(bitset <32> &bv,int n)
{
assert(n> 0&&n <=32);
int f[32];
buildFibonacci(f,n);
for(int i=0;i <n;++i)
bv.set(f[i]);
}

测试结果如下,不知道是不是你想要的结果:
bit 1on
bit 2on
bit 3on
bit 5on
bit 8on
bit13on
bit21on
Press any key to continue

热点排行