C趣味程序百例(23)和數(shù)能表示1~23的5個(gè)正整數(shù)

字號(hào):

73 和數(shù)能表示1~23的5個(gè)正整數(shù)
     已知五個(gè)互不相同的正整數(shù)之和為23,且從這五個(gè)數(shù)中挑選若干個(gè)加起來(lái)可以表示從1到23之內(nèi)的全部自然數(shù)。問(wèn)這五個(gè)數(shù)是什么?
    *問(wèn)題分析與算法設(shè)計(jì)
     從計(jì)算機(jī)程序設(shè)計(jì)的角度來(lái)說(shuō),可以用窮舉法分解23,然后判斷所分解的五個(gè)數(shù)是否可以表示1到23 之間的全部整數(shù)。
    *程序與程序注釋
    #include
    void main()
    {
     int a,b,c,d,e,i,j,k,l,m,x,count=0,f=0; /*f:分解的5個(gè)數(shù)可以表示出1~23的標(biāo)記*/
     printf("There are following possble result:\n");
     for(a=1;a<=23;a++) /*將23分解為a,b,c,d,e五個(gè)數(shù)*/
     for(b=1+a;b<=23-a;b++)
     for(c=1+b;c<=23-a-b;c++)
     for(d=1+c;d<=23-a-b-c;d++)
     {
     f=1;
     if((e=23-a-b-c-d)>d)
     for(f=0,x=1;x<24&&!f;x++) /*判斷5個(gè)數(shù)可否表示1~23*/
     for(f=1,i=0;i<2&&f;i++) /*窮舉5個(gè)數(shù)的全部取舍*/
     for(j=0;j<2&&f;j++)
     for(k=0;k<2&&f;k++)
     for(l=0;l<2&&f;l++)
     for(m=0;m<2&&f;m++)
     if(x==a*i+b*j+c*k+d*l+e*m) f=0;
     if(!f) printf("[%d]: %d %d %d %d %d\n",++count,a,b,c,d,e);
     }
    }
    *運(yùn)行結(jié)果
     There are following possble result:
     [1]: 1 2 3 5 12
     [2]: 1 2 3 6 11
     [3]: 1 2 3 7 10
     [4]: 1 2 4 5 11
     [5]: 1 2 4 6 10
     [6]: 1 2 4 7 9