私信TA

用户名:1678463512

访问量:7261

签 名:

等  级
排  名 2707
经  验 2104
参赛次数 0
文章发表 20
年  龄 20
在职情况 待业
学  校 秋长中学
专  业

  自我简介:

解题思路:因为获第一名的是李家的孩子,获得第二的是王家的孩子,又因为没有一家的两个或三个孩子获得相连的名次,所以推断第三名一定是张家的孩子,采用穷举法,a,b,c为张家的孩子,d,e,f为李家的孩子,g,h,i为王家的孩子,所有的方法都遍历一遍,定义一个数组,ab数组元素都为1,ab[i](0<=i<=9)值为1时表示数i没有被使用,为0时表示数i已被使用。

注意事项:

参考代码:



    //张王李三家各有三个小孩。

    //一天,三家的九个孩子在一起比赛短跑,规定不分年龄大小,

    //跑第一得9分,跑第2得8分,依此类推。比赛结果各家的总分相同,

    //且这些孩子没有同时到达终点的,也没有一家的两个或三个孩子获得相连的名次。

    //已知获第一名的是李家的孩子,获得第二的是王家的孩子。

    //问获得最后一名的是谁家的孩子?

    int a,b,c,d,e,f,g,h,i,k;

    int ab[10] = {1,1,1,1,1,1,1,1,1,1};//数组赋初值

    int x[9];

    //a,b,c为张家的孩子,d,e,f为李家的孩子,g,h,i为王家的孩子

    for(a=1;a<8;a++)

    {

        ab[a] = 0;//表示不能再让其他变量取与a相同的值

        for(b=1;b<8;b++)

            if(ab[b])//如果b取得当前值没有和其他变量重复

                {

            ab[b] = 0;//表示不能再让其他变量取与b相同的值

        for(c=1;c<8;c++)

            if(ab[c])//如果c取得当前值没有和其他变量重复

                {

            ab[c] = 0;//表示不能再让其他变量取与c相同的值

        for(d=1;d<10;d++)

            if(ab[d]){//如果d取得当前值没有和其他变量重复

            ab[d] = 0;//表示不能再让其他变量取与d相同的值

        for(e=1;e<10;e++)

            if(ab[e]){//如果e取得当前值没有和其他变量重复

            ab[e] = 0;//表示不能再让其他变量取与e相同的值

        for(f=1;f<10;f++)

            if(ab[f]){//如果f取得当前值没有和其他变量重复

            ab[f] = 0;//表示不能再让其他变量取与f相同的值

        for(g=1;g<9;g++)

            if(ab[g]){//如果g取得当前值没有和其他变量重复

            ab[g] = 0;//表示不能再让其他变量取与g相同的值

        for(h=1;h<9;h++)

            if(ab[h]){//如果h取得当前值没有和其他变量重复

            ab[h] = 0;//表示不能再让其他变量取与h相同的值

        for(i=1;i<9;i++)


            if(ab[i]){//如果i取得当前值没有和其他变量重复

            ab[i] = 0;//表示不能再让其他变量取与i相同的值


            if(a+b+c==d+e+f && d+e+f==g+h+i)//每家孩子的总分相等

                if(d == 9 || e == 9 || f == 9)//第一名为李家的孩子

                if(g == 8 || h == 8 || i == 8)//第二名为王家的孩子

                if(a == 7 || b == 7 || c == 7)//所以第三名为张家的孩子

                if(a!=b+1 && a!=b-1 && a!=c+1 && a!=c-1 && b!=c+1 && b!=c-1 && d!=e+1 && d!=e-1 && d!=f+1 && d!=f-1 && e!=f+1 && e!=f-1 && g!=h+1 && g!=h-1 && g!=i+1 && g!=i-1 && h!=i+1 && h!=i-1)

               {//没有一家的两个或三个孩子获得相连的名次

                //printf("%d %d %d %d %d %d %d %d %d\n",a,b,c,d,e,f,g,h,i);

                x[0] = a;

                x[1] = b;

                x[2] = c;

                x[3] = d;

                x[4] = e;

                x[5] = f;

                x[6] = g;

                x[7] = h;

                x[8] = i;

                //结果输入数组中


                break;

               }


        ab[i]= 1;//本次循环没有找到解,让i取其他值

        }

        ab[h]= 1;//本次循环没有找到解,让h取其他值

        }

        ab[g]= 1;//本次循环没有找到解,让g取其他值

        }

        ab[f]= 1;//本次循环没有找到解,让f取其他值

        }

        ab[e]= 1;//本次循环没有找到解,让e取其他值

        }

        ab[d]= 1;//本次循环没有找到解,让d取其他值

        }

        ab[c]= 1;//本次循环没有找到解,让c取其他值

        }

        ab[b]= 1;//本次循环没有找到解,让b取其他值

        }

        ab[a]= 1;//本次循环没有找到解,让a取其他值




    }

    for(k = 0;k < 9;k++)//穷举法查找数字1

    {

        if(1 == x[k])//找到后退出循环

            break;

    }

    //发现:找到后立刻退出循环,那么k就是我们要找的数字1的下标

    if(k == 0 || k == 1 || k == 2)//下标为0,1,2是张家

        printf("Z");

    else if(k == 3 || k == 4 || k == 5)//下标为3,4,5是李家

        printf("L");

    else//(k == 0 || k == 1 || k == 2)//否则是王家

        printf("W");


 

0.0分

1 人评分

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

编程语言转换

万能编程问答

代码解释器

  评论区