离散的程序作业,原因是二维的传到函数里比较麻烦,就写在主函数里了,求不要介意。现在程序不知道为什么连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; }
解决方案:40分
数组太大了,栈内存已经不够