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

你看看。解决思路

2012-04-08 
你看看。//考虑这样的序列1,2,3,5,8,13,21,并初始化一个将该序列数字//所对应的位置置为1的bitset32对象。

你看看。
//考虑这样的序列1,2,3,5,8,13,21,并初始化一个将该序列数字
//所对应的位置置为1的bitset<32>对象。然后换个方法,给定一个空
//的bitset对象,编写一小段程序把相应的位数设置为1。
#include<iostream>
#include<vector>
#include<bitset>
using namespace std;
int fun(int a)
{  
  if((a==1)||(a==2))
return 1;
int b;
b=fun(a-1)+fun(a-2);
return b;
}
int main()

vector<int> ivec;
int index=1;
for(index;fun(index)<32;++index)
ivec.push_back(fun(index));
bitset<32> bitvec1;
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
/*cout<<*iter<<" ";
cout<<endl;*/
bitvec1.set(*iter);
cout<<"bitvec1:"<<bitvec1<<endl;
return 0;
}

有没有更好的方法, 我感觉上面的方法内存开销过大。试试不要fun()函数,不要vector。直接弄出来,我试过,老是改出来的位置有问题。才想出这个笨方法。







[解决办法]
其实没太看明白你的意思。
呵呵,我在用bitset时,看到的结果是 bitset<32>的内存指向的是四字节位置,值和初始化用的int内存相同。memcpy?。。
vs,win2003
[解决办法]
没看懂。。。。。。。。。。。。。。。。
int n = 1;
int m = 2;
int p = 0;
while ( true )
{
p = (m>n)?(n+=m):(m+=n);
}

[解决办法]
我看看........
[解决办法]
[code=C/C++][/code]#include <iostream>
#include <bitset>
using namespace std;
int main()
{

bitset<32> ivec;

int front = 1, rear = 2;
int temp = 1;

ivec.set(1);
ivec.set(2);
temp = front + rear;

while(temp <= 32) //循环得到序列项的值并在ivec设置相应的位
{
//在ivec设置temp位
ivec.set(temp);

//计算序列项
front = rear;
rear = temp;
temp = front + rear;
}

return 0;
}

热点排行