個人特定問題

「個人特定問題」の編集履歴(バックアップ)一覧はこちら

個人特定問題」(2010/06/09 (水) 16:28:29) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

<p>#include &lt;stdio.h&gt;<br /><br /> #define M 11<br /> #define N 16<br /><br /> int data[M][N];<br /><br /> void input(){<br />     int i,j;char c;<br />     for(i=0;i&lt;M;i++){<br />         for(j=0;j&lt;N;j++){<br />             c=getchar();<br /> /*            printf("input=%d\n",c);*/<br />             if(c!=10){data[i][j]=c-48;}<br />             if(c==10){j--;}<br />         }<br />     }<br /> }<br /><br /> void q_abi(int use[M],int see[N],double abi[M]){<br />     int i,j,n;<br />     for(i=0;i&lt;M;i++){<br />         abi[i]=0;n=0;<br />         for(j=0;j&lt;N;j++){<br />             if((use[i]==1)&amp;&amp;(see[j]==1)){<br /> /*                printf("data[%d][%d]=%d,abi[%d]=%lf\n",i,j,data[i][j],i,abi[i]);<br /> */                n++;<br />                 abi[i]=abi[i]+data[i][j];<br />             }<br />         }<br /> /*        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));<br /> */<br />         if(n&gt;0){<br />             abi[i]=(abi[i]/n-0.5)*(abi[i]/n-0.5);}<br />         if(n==0){abi[i]=1;}        <br /> /*        printf("== abi[%d]=%.4lf\n",i,abi[i]);<br /> */    }<br /> }<br /><br /> void crear(int use[M],int see[N],double abi[M]){<br />     int i;<br />     for(i=0;i&lt;M;i++){use[i]=1;}<br />     for(i=0;i&lt;N;i++){see[i]=1;}<br />     for(i=0;i&lt;M;i++){abi[i]=0.0;}<br /> }<br /><br /> int cho_abi(int use[M],int see[N],double abi[M]){<br />     int i,n;double tmp=1;<br />     for(i=0;i&lt;M;i++){<br />         if(abi[i]&lt;tmp){<br />             tmp=abi[i];<br />             n=i;<br />         }<br />     }<br />     printf("cho q=%d\n",n);<br />     return n;<br /> }<br /><br /> void kaiseki(int n,int use[M],int see[N],double abi[M]){<br />     int seetmp[N];<br />     int mem,x,i;<br />     q_abi(use,see,abi);<br />     x=cho_abi(use,see,abi);<br />     use[x]=0;<br /><br />     printf("use[%d]=0\n",x);<br /><br />     mem=0;<br />     for(i=0;i&lt;N;i++){<br />         mem=mem+see[i];<br />     }<br />     printf("mem=%d\n", mem);<br />     <br />     if(mem&gt;2){<br />         /*x問題=0のメンバを抽出*/<br />         for(i=0;i&lt;N;i++){<br />             seetmp[i]=0;<br />             if((data[x][i]==1)&amp;&amp;(see[i]==1)){<br />                 seetmp[i]=1;<br />             }<br />         }<br />         kaiseki(n+1,use,seetmp,abi);<br />     <br />         /*x問題=1のメンバを抽出*/<br />         for(i=0;i&lt;N;i++){<br />             seetmp[i]=0;<br />             if((data[x][i]==0)&amp;&amp;(see[i]==1)){<br />                 seetmp[i]=1;<br />             }<br />         }<br />         kaiseki(n+1,use,seetmp,abi);<br />     }<br /><br />     if(mem==2){<br />         printf("ans=%d\n",n);<br />     }<br /> }<br /><br /> int main(){<br />     int use[M];int see[N];double abi[M];<br />     crear(use,see,abi);<br />     input();<br /><br />     kaiseki(1,use,see,abi);<br /><br />     return;<br /> }</p>

表示オプション

横に並べて表示:
変化行の前後のみ表示: