個人特定問題


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

#include <stdio.h>

#define M 11
#define N 16

int data[M][N];

void input(){
    int i,j;char c;
    for(i=0;i<M;i++){
        for(j=0;j<N;j++){
            c=getchar();
/*            printf("input=%d\n",c);*/
            if(c!=10){data[i][j]=c-48;}
            if(c==10){j--;}
        }
    }
}

void q_abi(int use[M],int see[N],double abi[M]){
    int i,j,n;
    for(i=0;i<M;i++){
        abi[i]=0;n=0;
        for(j=0;j<N;j++){
            if((use[i]==1)&&(see[j]==1)){
/*                printf("data[%d][%d]=%d,abi[%d]=%lf\n",i,j,data[i][j],i,abi[i]);
*/                n++;
                abi[i]=abi[i]+data[i][j];
            }
        }
/*        printf("abi[%d]=%.2lf n=%d abi/n=%lf |p|=%lf\n", i,abi[i],n,abi[i]/n,(abi[i]/n-0.5)*(abi[i]/n-0.5));
*/
        if(n>0){
            abi[i]=(abi[i]/n-0.5)*(abi[i]/n-0.5);}
        if(n==0){abi[i]=1;}        
/*        printf("== abi[%d]=%.4lf\n",i,abi[i]);
*/    }
}

void crear(int use[M],int see[N],double abi[M]){
    int i;
    for(i=0;i<M;i++){use[i]=1;}
    for(i=0;i<N;i++){see[i]=1;}
    for(i=0;i<M;i++){abi[i]=0.0;}
}

int cho_abi(int use[M],int see[N],double abi[M]){
    int i,n;double tmp=1;
    for(i=0;i<M;i++){
        if(abi[i]<tmp){
            tmp=abi[i];
            n=i;
        }
    }
    printf("cho q=%d\n",n);
    return n;
}

void kaiseki(int n,int use[M],int see[N],double abi[M]){
    int seetmp[N];
    int mem,x,i;
    q_abi(use,see,abi);
    x=cho_abi(use,see,abi);
    use[x]=0;

    printf("use[%d]=0\n",x);

    mem=0;
    for(i=0;i<N;i++){
        mem=mem+see[i];
    }
    printf("mem=%d\n", mem);
    
    if(mem>2){
        /*x問題=0のメンバを抽出*/
        for(i=0;i<N;i++){
            seetmp[i]=0;
            if((data[x][i]==1)&&(see[i]==1)){
                seetmp[i]=1;
            }
        }
        kaiseki(n+1,use,seetmp,abi);
    
        /*x問題=1のメンバを抽出*/
        for(i=0;i<N;i++){
            seetmp[i]=0;
            if((data[x][i]==0)&&(see[i]==1)){
                seetmp[i]=1;
            }
        }
        kaiseki(n+1,use,seetmp,abi);
    }

    if(mem==2){
        printf("ans=%d\n",n);
    }
}

int main(){
    int use[M];int see[N];double abi[M];
    crear(use,see,abi);
    input();

    kaiseki(1,use,see,abi);

    return;
}