美文网首页
一、枚举

一、枚举

作者: 安东可 | 来源:发表于2017-08-10 10:46 被阅读7次

    【本次课程来自《coursera-北京大学-算法基础-第二周》】



    在这个问题中,我们可以不用取到100.因为公鸡五块一只,母鸡三块一只,那么公鸡最多20只,母鸡最多33只,因此可以写去如下实现:

    #include <iostream>
    using namespace std;
    int main() {
      // 初始化公鸡,母鸡和小鸡为0
        int cocks = 0, hens = 0,chicks = 0;
        int i,j,k;
      //循环计算
        for(i = 1;i < 20; i++)
            for(j = 1; j < 33; j++)
            {
                k = 100 - i -j;
                //第一步,判断小鸡是三的倍数
                if(k % 3 == 0 )
                    //第二步,判断价钱总和为100
                    if( 5 * i + 3 * j + k / 3 == 100 )
                    {
                        cocks = i;
                        hens = j;
                        chicks = k;
                    }
            }
    //输出
        cout << "ccocks: "<<cocks<<" hens: "<<hens<<" chicks: "<<chicks<<endl;
    //这个是为了cmd运算完后不立即结束一闪而过
        cin.clear();
        cin.sync();
        cin.get();
        return 0;
    }
    

    二、熄灯问题

    程序要求:
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    int puzzle[6][8],press[6][8];
    bool guess(){
        int c, r; //行, 列
        //我们只计算中间的五行六列,因此序号从1开始
        for (r = 1; r < 5; r++)
            for( c = 1; c < 7 ; c++)
            {
                //对于下一行点击状态,等于上一行本身状态和点击状态,
                //加上受到上,左右三方面影响的和 模 2
                press[r + 1][c] = (puzzle[r][c] + press[r][c] +
                press[r-1][c] + press[r][c-1] + press[r][c+1]) % 2;
            }
        //判断最后一行能够灯全灭
        for(c =1;c<7;c++)
        {
            // 计算第五行的press如果不能灭掉第五行的灯
            if((press[5][c-1] + press[5][c] + press[5][c+1] +
            press[4][c]) % 2 != puzzle[5][c])
            return false;
        }
        return true;
    }
    
    //如果灯无法得到全灭的解,就更新press数组第一行
    int enumerate(){
        int c;
        bool success;
        //初始化press第一行为0 
        for(c=1;c<7;c++){
            press[1][c] = 0;
        }
        //更新每一行,每一行作为二进制进位的方式,只有0 ,1
        while(guess() == false){
            press[1][1]++;
            c = 1;
            while(press[1][c] > 1){
                press[1][c] = 0;
                c++;
                press[1][c]++;
            }
        }
        return 0;
    }
    
    int main() {
        int cases,i,r,c ;
        //几个初始组
        cout<<"input cases: ";
        scanf("%d",&cases);
        //对于外围0,7列和第0行默认为0
        cout<<"cases:"<<cases<<endl;
        for(r=1;r<6;r++)
            press[r][0] = press[r][7] = 0;
        for(c=1;c<7;c++)
            press[0][c] = 0;
        
        //输入初始
        for(i=0;i<cases;i++)
        {
            cout<<"input puzzle: "<<endl;
            for(r=1;r<6;r++)
                for(c=1;c<7;c++)
                    //scanf("%d",&puzzle[r][c]);
                    cin>>puzzle[r][c];
            //计算每组结果
            enumerate();
            cout<<"output puzzle: "<<i+1<<'\n';
            for(r=1;r<6;r++){
                for(c=1;c<7;c++)
                    cout<<press[r][c]<<" ";
                cout<<'\n';
            }
        }
    
    
    
        cin.clear();
        cin.sync();
        cin.get();
        return 0;
    }
    
    

    三、讨厌的青蛙

    相关文章

      网友评论

          本文标题:一、枚举

          本文链接:https://www.haomeiwen.com/subject/luvdhxtx.html