为什么不输出结果呢?
#include "stdio.h"#include "math.h"
bool isUse[100];
int order[100];
int Mzhi[1000][1000];
int p=0;
FILE *fp;
void change(int *r,int n,int num);
//Cvalue
#include <iostream>
#include <stdlib.h>
#include <string.h>
void f1(int m);
void zh(int m);
void Cb(int u,int q,int m,int h);
int a[1000000]={0},b[1000000]={0},d[100]={0};
int c[20];
int count=0;
int Cvalue[10000000][100000]={0};
using namespace std;
template<class T>
//Cvalue[][]的值的生成
int DFS_FindNext(T arr[], int nMaxElm, int nDepth)
{
int n = nDepth-1;
for (++arr[n]; n>=0 && arr[n]>=nMaxElm; ++arr[--n]);
if (n<0) return 0;
for (int t = n+1; t<nDepth; ++t)
arr[t] = 0;
return 1;
}
void zuhe(int a,int b){
int arr[20]={0};
int outmap[10000]={0};
//={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
int mi=pow(a,b);
int i=0;
for(int h=0;h<100;h++){
outmap[h]=h;
}
do
{
for(;i<mi;){
for(int t=0; t<b; ++t)
{
Cvalue[i][t]=outmap[arr[t]];
}
i++;
break;
}
count++;
}while(DFS_FindNext(arr, a, b));
}
//jiecheng函数
int jiecheng(int g){
int res=1;
for(int i=1;i<=g;i++){
res*=i;
}
return res;
}
//Mzhi[][]的值的生成
void change(int *r,int n,int num)
{
for (int i=0;i<n;i++)
{
if(isUse[i]==0)
{
isUse[i]=1;
order[num]=i;
if(n>num)
change(r,n,1+num);
else
{
for(;p<jiecheng(n);){
for (int j=1;j<=n;j++)
{
Mzhi[p][j]=r[order[j]];
}
p++;
break;
}
}
isUse[i]=0;
}
}
}
void main()
{
int i,m,n,h,q;
if((fp=fopen("sunlaoshi.txt","w"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
printf("\t\t*******************欢迎使用******************\n");
printf("请分别输入m、h:");
scanf("%d%d",&m,&h);
q=pow(2,m)-1;
n=pow(2,h)-1;
// zuhe(n+1,m+1);//这个是ci的组合数
int *r=new int [m];
for( i=0;i<m;i++)
{
r[i]=i+1;
}
for ( i=0;i<100;i++)
{
isUse[i]=0;
}
change(r,m,1); //这个是di的排列
//给系数Ci赋值
for(int j=0;j<m;j++){
printf("请输入C[%d]的值为:",j+1);
scanf("%d",&c[j+1]);
fprintf(fp," %d ",c[j+1]);
}
fprintf(fp,"\n");
for(int k=0;k<jiecheng(m);k++){
//给d[i]赋值
fprintf(fp,"d的值为:");
for(int l=1;l<m+1;l++){
d[l]=Mzhi[k][l];
fprintf(fp," %d ",d[l]);
}
fprintf(fp,"\n");
f1(m);
fprintf(fp,"b序列为:");
for(int u=1;u<=pow(2,m);u++){ //输出序列b
fprintf(fp," %d ",b[u]%(n+1));
}
fprintf(fp,"\n");
for(int w=0;w<=q;w++) //输出序列Cb(u)
{
fprintf(fp,"Cb(%d)的值为:",w);
Cb(w,q,m,h);
}
fprintf(fp,"\n");
}
}
void f1(int m) // 得到序列a
{
int i,j,t,k,p,sum;
int x[100]={0};
for(j=0;j<pow(2,m);j++)
{
a[j+1]=0;
sum=0;
k=j;
p=m;
do{
t=k%2;
x[p--]=t;
}while((k=k/2)!=0); //给序列x[i]赋值
for(i=1;i<m;i++)
a[j+1]+=x[d[i]]*x[d[i+1]];
for(i=1;i<=m;i++)
sum+=c[i]*x[d[i]];
b[j+1]=a[j+1]+sum+c[m+1];
}
}
void Cb(int u,int q,int m,int h) //求Cb(u)
{
int i,j;
int z[10000]={0},count[10000]={0};
for(i=1;i<=q+1-u;i++)
{
z[i]=b[i]-b[i+u];
while(z[i]<0)
z[i]+=pow(2,h); //将c[i]的值取正,控制在0--pow(2,m)-1之间
z[i]%=(int)pow(2,h); //%pow(2,h),c[i]的值控制在0--pow(2,h)-1之间
}
for(j=0;j<pow(2,h);j++)
for(i=1;i<=q+1-u;i++)
if(z[i]==j)
count[j]++; //按j由小到大的顺序分别统计值为j的个数
for(j=0;j<pow(2,h);j++)
if(count[j]!=0) //j的值出现0次的话则不输出
fprintf(fp,"%dX[%d]+",count[j],j);
fprintf(fp,"\n");
}