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

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

2013-07-08 
求一种算法思路现有一串512位的二进制数据,已知最多其中的3位发生错误(错误的话该位为1,不出错该位为0),那

求一种算法思路
现有一串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]<<" ";
    }
}
基本是楼上的思路,供楼主参考。

热点排行