读书人

求一种算法思路,该怎么解决

发布时间: 2013-07-08 14:13:00 作者: rapoo

求一种算法思路
现有一串512位的二进制数据,已知最多其中的3位发生错误(错误的话该位为1,不出错该位为0),那么共有C512取1+C512取2+C512取3=22370048种,先要求把所有可能的错误情况列出来,比如就第一位出错:10000000...000,该如何穷举完所有情况呢? 算法 二进制
[解决办法]

void printArr(char *arr)
{
for(int n = 0;n<=511;n++)
{
cout<<arr[n]<<endl;
}
}

int i;
char arr[511];
//C512取1
for(i=0;i<=511;i++)
{
arr[i] = '1';
printArr(arr);
arr[i] = '0';
}

//C512取2
for(i=0;i<=511;i++)
{
for(int n=1;n<=510;n++)
{
int j = i+n;
if(j>511)
{ break; }
arr[i]='1';
arr[j]='1';
printArr(arr);
arr[i]='0';
arr[j]='0';
}
}

//C512取3
for(i=0;i<=511;i++)
{
for(int n=1;n<=510;n++)
int q = i+n;
if(q>511)
{break ;}
else
{
for(int m=2;m<=509;m++)
{
int p = q+m;
if(p>511)
{ break;}
arr[i]='1';
arr[n]='1';
arr[m]='1';
printArr(arr);
arr[i]='0';
arr[n]='0';
arr[m]='0';
}
}
}

[解决办法]

#include<iostream>
using namespace std;

void show(int ,int,int);
const int size=512;
int p[size];

int main()
{

for (auto i=0;i!=size;i++)
show(i,-1,-1);
cout<<endl;
for (auto i=0;i!=size;i++)
for (auto j=i+1;j!=size;j++)
show(i,j,-1);
cout<<endl;
for (auto i=0;i!=size;i++)
for (auto j=i+1;j!=size;j++)
for (auto k=j+1;k!=size;k++)
show(i,j,k);

return 0;
}

void show(int a,int b,int c)
{
for(auto i=0;i!=size;i++)
{


if ((i==a&&a>-1)
[解决办法]
(i==b&&b>-1)
[解决办法]
(i==c&&c>-1))
p[i]=1;
else
p[i]=0;
cout<<p[i]<<" ";
}
}
基本是楼上的思路,供楼主参考。

读书人网 >C++

热点推荐