试验员


私信TA

用户名:Tryer

访问量:609

签 名:

等  级
排  名 7271
经  验 1276
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

注意事项:

参考代码:

#include<stdio.h>

int main()

{

    int i=0,n[64],a,b,c,d,e,f,z=0;

//i是控制用的变量;n[]表示各种情况,数组长度取决于变量数量,为2的指数;a,b,c,d,e,f只是为了看起来方便.

//z是在不知道可能解数量的情况下,为了记录人数选出最优解设的变量.

    while(i<=63)

    {

        n[i]=i;//i从0开始,数组依次放置0到63

        a=(n[i]/32)%2;//如果i<=31,意味着n[i]/32=0(设的是整形),那么a一定为0;如果i>=32,那么n[i]/32一定是一点几,取1,意味着a一定为1

        b=(n[i]/16)%2;//除数是16意味着求有几个16,对2求余得奇数或偶数.因为a有所不同,所以b相同时可能有多种情况

        c=(n[i]/8)%2;//下方规则相同

        d=(n[i]/4)%2;

        e=(n[i]/2)%2;

        f=n[i]%2;

        if(a+b<1||a+d>1||a+e+f!=2||b+c==1||c+d!=1||e>d)//这是满足要求的条件

        {

            n[i]=64;//不满足要求就让它为64,如果满足要求就保留原值(0-63)

        }

        else if(z<a+b+c+d+e+f)

        {

            z=a+b+c+d+e+f;//因为我们要求最优解,即人数最多的解,所以把人数记录下来,1是去,0是不去,和越大去的人越多.

        }

        else

        {

            n[i]=64;//如果后续的解不如之前的解,那就没必要留着了,但同时之前留着的不是最优解的解还在,这里偷懒一下,没把之前那些不是最优解的解去掉

        }

        i=i+1;

    }

    i=0;

    while(i<=63)

    {

        if(n[i]!=64&&(n[i]/32)%2==1) printf("A,");//去一个输出一个

        if(n[i]!=64&&(n[i]/16)%2==1) printf("B,");

        if(n[i]!=64&&(n[i]/8)%2==1) printf("C,");

        if(n[i]!=64&&(n[i]/4)%2==1) printf("D,");

        if(n[i]!=64&&(n[i]/2)%2==1) printf("E,");

        if(n[i]!=64&&n[i]%2==1) printf("F,");

        if(n[i]!=64) printf("\n");//本题只有一个解,但如果有多个解可以换行输出

        i=i+1;

    }

return 0;

}

 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区