标题:为什么不输出结果呢?
只看楼主
liusjlo
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-12-20
结帖率:100%
已结贴  问题点数:10 回复次数:2 
为什么不输出结果呢?
#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-24 20:47
wangdayong99
Rank: 2
等 级:论坛游民
帖 子:9
专家分:97
注 册:2013-12-24
得分:8 
//修改可程序,见程序中标注“//修改”和“//新加”处,可以运行了
// shuchujieguo.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#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[10000][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((double)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,(double)m)-1;//修改
    n=pow(2,(double)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);
        fflush(stdin);//新加
        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,(double)m);u++){ //输出序列b //修改
            if (n>=1)//新加
            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,(double)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,(double)h);                //将c[i]的值取正,控制在0--pow(2,m)-1之间 //修改
        if(z[i]!=0)//新加
        z[i]%=(int)pow(2,(double)h);               //%pow(2,h),c[i]的值控制在0--pow(2,h)-1之间
    }
    for(j=0;j<pow(2,(double)h);j++)
        for(i=1;i<=q+1-u;i++)
            if(z[i]==j)
                count[j]++;                 //按j由小到大的顺序分别统计值为j的个数
    for(j=0;j<pow(2,(double)h);j++)//修改
        if(count[j]!=0)                            //j的值出现0次的话则不输出
            fprintf(fp,"%dX[%d]+",count[j],j);
    fprintf(fp,"\n");

}
2013-12-25 11:41
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
得分:2 
同意楼上

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-25 12:10



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




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

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