标题:怎样才能输出结果
只看楼主
liusjlo
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-12-20
结帖率:100%
 问题点数:0 回复次数:3 
怎样才能输出结果
#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");

}
搜索更多相关主题的帖子: include change count 
2013-12-25 19:34
liusjlo
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-12-20
得分:0 
求教
2013-12-26 08:31
liusjlo
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-12-20
得分:0 
??????
2013-12-27 16:24
liusjlo
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-12-20
得分:0 
怎样才能有个结果呀?
2013-12-30 21:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-425691-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.092815 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved