一、枚举

【本次课程来自《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;
}

三、讨厌的青蛙

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近关注了很多设计号,微信微博app,对一位从小学到大学几乎没有上过美术课的阿姨来说,对美的想象和崇拜,通过网络,...
    良仔lz阅读 1,418评论 0 0
  • 场景一: 医院儿科病房,护士拿着一堆空管来到病床前:“小朋友,准备抽血了。” 我看着这么多空管数了数,15管。不禁...
    愚箏阅读 2,372评论 0 1
  • 和朋友聊创业,聊到她的一个朋友(简称K)的老婆在两年多的时间里开了多家酒店,分在北京、三亚等不同的城市,当然最主要...
    林蔚安阅读 6,099评论 0 0
  • The mosquitoes are eating frogs. The crabs are taking off...
    兰舟酱阅读 2,701评论 0 2
  • 昨天发烧,到深夜也还没退烧。折腾了一晚上到今早也没好很多。上午起来又睡下,反复了几次,终于在下午觉的有些恢复。晚上...
    小王加油啊阅读 1,571评论 0 0

友情链接更多精彩内容