离散的程序作业,因为二维的传到函数里比较麻烦,就写在主函数里了,求不要介意。现在程序不知道为什么连main都进入不了,用CB和VS都是直接崩,实在不懂哪里的问题。谢谢~
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 1000
int main(){
int HOctHalf[N][N];
int m,n;
scanf(" %d%d",&m,&n);
for(int i = 1;i <= m;i++){
for(int j = 1;j <= n-m;j++){
scanf(" %d",&HOctHalf[i][j]);
}
}
/*
int pow;
int HDecHalf[N];
for(int j = 1;j <= n-m;j++){
pow = 1;
HDecHalf[j] = 0;
for(int i = m;i <= n-m;i++){
HDecHalf[j] += pow*HOctHalf[i][j];
pow *= 2;
}
}
*/
int code[N][N];
int temp;
for(int i = 0;i <= (int)pow(2,m);i++){
temp = i;
for(int j = m;j >= 1;j++){
code[i][j] = temp%2;
temp /= 2;
}
}
int codeWord[N][N];
for(int i = 0;i <= (int)pow(2,m);i++){
for(int j = 1;j <= m;j++){
codeWord[i][j] = code[i][j];
}
}
for(int i = 0;i <= (int)pow(2,m);i++){
for(int j = 1;j <= n-m;j++){
codeWord[i][j+m] = 0;
for(int k = 1;k <= m;k++){
codeWord[i][j+m] += code[i][k]*HOctHalf[k][j];
}
codeWord[i][j+m] %= 2;
}
}
int decode[N];
for(int i = 1;i <= n;i++)
scanf("%d",&decode[i]);
int cnt[N];
for(int i = 0;i <= (int)pow(2,m);i++){
for(int j = 1;j <= n;j++){
if((decode[j]^codeWord[i][j]) == 1)
cnt[i]++;
}
}
int min = cnt[0],minRpos = 0;
for(int i = 1;i <= (int)pow(2,m);i++){
if(min < cnt[i]){
min = cnt[i];
minRpos = i;
}
}
for(int i = 1;i <= m;i++)
printf("%d",code[minRpos][i]);
printf("\n");
return 0;
}