口袋中有红、黄、蓝、白、黑5种颜色的球若干。每次从口袋中任意取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况

        如果一个变量只能有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。

        声明枚举类型用enum开头。例如:
        enum weekday{sun,mon,tue,wed,thu,fri,sat};
上面声明了一个枚举类型weekday,花括号中sun,mon,…,sat等称为枚举元素枚举常量。表示这个类型的变量的值只能是以上7个值之一,它们是用户自己定义的标识符。
        声明枚举类型的一般形式为
        enum 枚举类型名 {枚举常量表};
在声明了枚举类型之后,可以用它来定义变量。如
        weekday workday,week_end;
这样,workday和weck_end被定义为枚举类型weekday的变量。
        在C语言中,枚举类型名包括关键字enum,以上的定义可写为
        enum weekday workday,week_end;
在C++中允许不写enum,但保留了C的用法。
        根据以上对枚举类型weekday的声明,枚举变量的值只能是sun~sat。例如:
        workday=mon;
        week_end=sun;
是正确的。也可以在声明枚举类型的同时定义枚举变量,如
        enum{sun,mon,tue,wed,thu,fri,sat} workday,week_end;
        需要指出的是:枚举元素的名字本身并没有特定的含义。例如不因写成sun或sunday就自动代表"星期天",它只是一个符号,究竟用来代表什么含义,完全由程序员考虑,并在程序中对它们作相应的处理。
        说明:
        (1)枚举元素按常量处理,故称枚举常量。它们不是变量,不能对它们赋值,即枚举元素的值是固定的。例如:
        sum=0;mon=0;         //错误,不能用赋值语句对枚举常量赋值
        (2)枚举元素作为常量,它们是有值的,其值是一个整数,编译系统按定义时的顺序对它们赋值为0,1,2,3,…。在上面的声明中,sum的值为0,mon的值为1,……,sat的值为6。如果有赋值语句:
        workday=mon;          //把枚举常量mon的值赋给枚举变量workday, workday的值等于1
这个值是可以输出的。如
        cout<<workday;        //输出整数1,而不是字符mon
也可以在声明枚举类型时自己指定枚举元素的值,如
        enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat};

指定 sun 为 7,mon=1,以后按顺序加1,sat为6。

        (3)枚举值可以用来做判断比较,按整数比较规则进行比较。如
        if(workday==mon)...        //判定workday的值是否等于mon
        if(workday>sun)...           //判定workday的值是否大于 sun
        按其在声明枚举类型时的顺序号比较。如果定义时未另行指定,则第1个枚举元素
的值为0。故mon>sun,sat>fri。
        (4)不能把一个整数直接赋给一个枚举变量,枚举变量只能接受枚举类型数据。如                        workday=tue;        //正确,把枚举常量赋给枚举变量
        workday=2;           //错误,它们属于不同的类型
应先进行强制类型转换才能赋值。如
        workday=(weekday)2;        //这是从C语言继承下来的强制类型转换形式

        workday=weekday(2);        //这是C++风格的强制类型转换形式
以上语句的作用是将顺序号为2的枚举元素赋给workday。相当于
        workday=tue;

解题思路:

        球的颜色只有5种,每一个球的颜色只能是这5种之一,因此可以用枚举类型变量来处理。设某一次取出的球的颜色为i,j,k。显然,i,j,k都是以上5种颜色之一,根据题意,要求i,j,k三者互不相等。可以用穷举法,对每一种可能分别进行测试,看哪一组符合条件。
编写程序:

运行结果:

程序分析:

        用n累计得到3种不同色球、不同排列的次数。外循环使第1个球i从red变到black。中循环使第2个球j也从red变到black。如果i和j同色则不可取,只有i,j不同色(i≠j)时才需要继续找第3个球,此时第3个球k也有5种可能(red到black),但要求第3个球不能与第1个球或第2个球同色,即k≠i,k≠j。满足此条件就得到3种不同色的球。使n加1,输出n和这组3色组合方案。

        问题是如何根据i,j,k的值输出red,blue等单词。不能写成"cout<<red;"来输出"red"字符串。为了输出3个球的颜色,显然应经过3次循环,第1次输出i的颜色,第2次输出j的颜色,第3次输出k的颜色。在3次循环中先后将i,j,k的值赋予pri。然后根据pri的值输出相应的颜色信息。前面已指出:枚举常量只是一个符号,本身并无任何含义,必须由程序编制者在程序中对它作相应的处理,以体现人们心目中的含义。在第1次循环时,pri的值为i,如果i的值为red,则输出字符串"red",表示我们心目中以枚举常量red代表"红色",以此类推。执行程序第12~29行输出一组信息,外循环全部执行完后,全部方案就已输出完了。最后输出总数n。
        有人说,不用枚举常量而用常数0代表"红",1代表"黄"……不也可以吗?是的,完全可以。但显然用枚举变量更直观,因为枚举元素都选用了令人"见名知意"的标识符,而且枚举变量的值限制在定义时规定的几个枚举元素范围内,如果赋予它一个其他值,就会出现出错信息,便于检查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/354878.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab个性化绘图第3期—带三维球标记的折线图

前段时间有会员在群里问该如何绘制下面这种带三维球标记的折线图&#xff1a; 本期内容就来分享一下带三维球标记的折线图的Matlab绘制思路。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需…

Navicat和SQLynx功能比较三(数据导出:使用MySQL近千万数据测试)

数据导出的功能在数据库管理工具中是最普遍的功能之一。所以数据导出的功能稳定性和性能也是数据库管理工具是否能很好地满足应用需求的一个考虑因素。 目录 1. 整体比较 2. 示例 2.1 前置环境 2.2 Navicat导出 2.3 SQLynx导出 2.4 性能对比结果&#xff08;690万行数据&…

【机器学习】线性回归:从基础到实践的深度解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 线性回归&#xff1a;从基础到实践的深度解析引言一、线性回归基础1.1 定义与目…

浸没式液冷服务器的换热效率及节能潜力分析

服务器浸没式液冷的换热效率及节能潜力 摘要&#xff1a;我们针对服务器浸没式液冷实验台进行了深入测试&#xff0c;探究了不同室外温度和服务器发热功率对系统制冷PUE的影响。实验数据显示&#xff0c;该系统的制冷PUE值介于1.05至1.28之间&#xff0c;高效节能特点显著。 在…

Java代码如何运行

通过前面的第一篇文章&#xff0c;对JVM整体脉络有了一个大概了解。第二篇文章我们通过对高级语言低级语言不同特性的探讨引出了Java的编译过程。有了前面的铺垫&#xff0c;咱们今天正式进入Java到底是如何运行起来的探讨。 目前大部分公司都是使用maven作为包管理工具&#x…

大润发超市购物卡怎么用?

收到大润发超市的礼品卡以后&#xff0c;我才发现&#xff0c;最近的大润发也得十来公里 为了100块的大润发打车也太不划算了 叫外送也不在配送范围内 最后没办法&#xff0c;在收卡云上出掉了&#xff0c;还好最近价格不错&#xff0c;也不亏&#xff0c;收卡云的到账速度也…

Jmeter 性能测试步骤是什么?

性能测试是软件开发过程中非常重要的一环。它可以帮助我们评估软件系统在不同负载下的性能表现&#xff0c;找出系统中的性能瓶颈&#xff0c;并提供改进方案。而JMeter作为一款功能强大且广泛使用的性能测试工具&#xff0c;可以帮助我们实现这一目标。 下面&#xff0c;我将…

【机器学习】从理论到实践:决策树算法在机器学习中的应用与实现

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f4d5;引言 ⛓决策树的基本原理 1. 决策树的结构 2. 信息增益 熵的计算公式 信息增益的计算公式 3. 基尼指数 4. 决策树的构建 &#x1f916;决策树的代码实现 1. 数据准备 2. 决策树模型训练 3.…

XMind 2024软件最新版下载及详细安装教程

​人所共知的是XMind 在公司和教育领域都有很广泛的应用&#xff0c;在公司中它能够用来进行会议管理、项目管理、信息管理、计划和XMind 被认为是一种新一代演示软件的模式。也就是说XMind不仅能够绘制思维导图&#xff0c;还能够绘制鱼骨图、二维图、树形图、逻辑图、组织结构…

记一次某单位的内网渗透测试

0x01 web打点 访问漏洞url:http://www.xx.xx.com进入某医疗系统 使用越权加文件上传拿到shell 0x02 内网渗透 192.168.xx.x 管理员 通过哥斯拉上线msf 上线后进行信息收集: 网卡信息、补丁信息、杀毒进程、用户在线情况、是否存在域、翻文件查找数据库密码、浏览器保存密码…

【ai】tx2-nx:搭配torch的torchvision

微雪的教程pytorch_version 1.10.0 官方教程安装torch官方教程 依赖项 nvidia@tx2-nx:~/twork/03_yolov5$ $ sudo apt-get install libjpeg-dev zlib1g-dev lib

EtherCAT笔记(三) —— 主站与从站的硬件组成

1. EtherCAT 主站的硬件组成 EtherCAT主站使用标准以太网控制器&#xff0c;也即EtherCAT主站可以使用以太网控制器的任何设备。当我们有一台带网口的笔记本、工控机&#xff0c;甚至是树莓派也可以作为EtherCAT主站。 EtherCAT协议是对Ethernet协议在实时控制等方面的优化&am…

el-table表格变更前后根据数据值改变背景颜色

需求&#xff1a; 1.左侧变更前表格数据不可以编辑&#xff0c;并且背景色加灰 2.右侧变更后表格数据可被编辑&#xff0c;编辑后变更前与变更后行数据不一致&#xff0c;添加背景色区分 3.点击删除的时候&#xff0c;给变更后表格当前行&#xff0c;添加背景色和删除的中横…

功能测试 之 单模块测试----轮播图、登录、注册

单功能怎么测&#xff1f; 需求分析 拆解测试点 编写用例 1.轮播图 &#xff08;1&#xff09;需求分析 位置&#xff1a;后台--页面--广告管理---广告列表(搜索index页面增加广告位2) 操作完成后需要点击admin---更新缓存,前台页面刷新生效 &#xff08;2&#xff09;拆解…

CI /CD学习

CI/CD概述 CI/CD 是持续集成和持续交付/部署的缩写&#xff0c;旨在简化并加快软件开发生命周期。 持续集成&#xff08;CI&#xff09;是指自动且频繁地将代码更改集成到共享源代码存储库中的做法。持续交付和/或持续部署&#xff08;CD&#xff09;是一个由两部分组成的过程…

【ARMv8/v9 GIC 系列 2.1 -- GIC SPI 中断的 pending 和 clear pending 配置】

文章目录 GIC Pending 和 Clear PendingGICD_ISPENDR<n>GICD_ICPENDR<n>参数<n>编号解释使用举例设置中断ID 100为挂起状态清除中断ID 100的挂起状态 代码实现小结 GIC Pending 和 Clear Pending 在ARMv8体系结构中&#xff0c;GICD_ISPENDR<n> 和 GI…

GitHub爆赞!终于有大佬把《Python学习手册》学习笔记分享出来了

这份笔记的目标是为了给出一份比较精炼&#xff0c;但是又要浅显易懂的Python教程。《Python学习手册》中文第四版虽然比较简单&#xff0c;但是措辞比较罗嗦&#xff0c;而且一个语法点往往散落在多个章节&#xff0c;不方便读者总结。 我在做笔记时&#xff0c;将一个知识点…

家有老人小孩,室内灰尘危害大!资深家政教你选对除尘空气净化器

哈喽&#xff0c;各位亲爱的朋友们&#xff01;今天我们来聊聊每次大扫除时最让人头疼的问题——灰尘。你有没有发现&#xff0c;两天不打扫&#xff0c;桌子上就能积上一层灰&#xff1b;阳光一照&#xff0c;地板上的灰尘都在跳舞&#xff1b;整理被子的时候&#xff0c;空气…

INFINI Labs 助力开源与教育:免费许可证计划全面升级

在数字化浪潮席卷全球的今天&#xff0c;INFINI Labs 深刻认识到开源项目和教育机构在技术创新与人才培养中的核心作用。因此&#xff0c;我们郑重推出全新升级的免费许可证计划&#xff0c;旨在全球范围内为开源社区和教育界提供有力支持&#xff0c;共同推动软件生态的繁荣与…

如何建立私域流量?私域流量怎么运营,一文读懂

当全网都在讨论私域流量&#xff0c;你是不是也有很多问号呢&#xff1f; 互联网高速发达&#xff0c;消费形式日新月异&#xff0c;跟不上时代就会被时代淘汰&#xff0c;接下来&#xff0c;我们就从3个层面深度讨论下私域流量究竟是什么&#xff1f;为什么要玩转私域流量&am…