当前位置: 首页 > article >正文

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)(六)

实战训练1—输出九九乘法表

问题描述:

在学校里学过九九乘法表,编程实现打印九九乘法表。

输入格式:

无输入

输出格式:


1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

问题分析:

仔细观察乘法表,可以发现由行列构成,每列的个数正好等于所在的行数,类似于之前介绍过的字符图形,使用for循环嵌套可以解决此问题。外循环变量i来控制行数,起始值为1,终值为9,更新表达式为自增表达式,内循环变量j来控制列数,起始值为1,由于第1行有1个等式,第2行有2个等式,……,内层循环变量j的终值为行数i,更新表达式也为自增表达式,由外循环变量i和内循环变量j相乘的等式构成了内循环的循环体,内循环加输出换行共同构成外循环体。具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main(){
    for(int i=1;i<=9;i++){//定义外层循环,循环变量i来控制行数,从1到9 
    	for(int j=1;j<=i;j++){//定义内层循环,循环变量j来控制列数,从1到i 
    		cout<<i<<'*'<<j<<'='<<i*j<<' ';//输出i和j相乘的等式 
	}
	cout<<endl;//输出换行 
	} 
    return 0;
}

如果想让九九乘法表里面的等式对齐,如下面运行结果:


1*1= 1
2*1= 2 2*2= 4
3*1= 3 3*2= 6 3*3= 9
4*1= 4 4*2= 8 4*3=12 4*4=16
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

可以采用格式化输出来实现,让i*j的值占两列,并且右对齐,具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main(){
    for(int i=1;i<=9;i++){//定义外层循环,循环变量i来控制行数,从1到9 
    	for(int j=1;j<=i;j++){//定义内层循环,循环变量j来控制列数,从1到i 
    		printf("%d*%d=%2d ",i,j,i*j);//格式化输出i,j以及i和j相乘的结果 
	}
	printf("\n");//输出换行 
	} 
    return 0;
}

实战训练2—换零钱

某人想将面值为100元的人民币兑换成若干张5元、2 元和1元面值的纸币,但要求零钱总数为50张,并且每种面值的纸币至少1张,请输出每一种可能的换法。

输入格式:

输出格式:

输出若干行,每行包含一种换法,分别表示5元的张数,2元的张数和1元的张数,中间用空格隔开。

输入输出样例:

输入样例

输出样例

1 46 3

2 42 6

3 38 9

4 34 12

5 30 15

6 26 18

7 22 21

8 18 24

9 14 27

10 10 30

11 6 33

12 2 36

问题分析:

根据题意,将100元的人民币兑换成5元、2元和1元的零钱,每种零钱至少1张,所以5元的取值可以从1到20(100元全部换5元的话,最多20张),2元的取值是1到50张(100元全部换2元,最多可以换50张),剩下的全部为1元的张数,要求列举出所有的方案数,所以可以使用for嵌套循环来实现,用外层循环变量i来控制5元的张数,内层循环j来控制2元的张数,那么1元的张数就为(50-i-j),外层循环变量i,起始值为1,终值为20,循环变量更新表达式为自增运算,内层循环变量j,起始值为1,终值为50,循环变量更新表达式也为自增运算,内层循环的循环体,首先计算1元的张数k为k=50-i-j,然后计算所有零钱的面值之和是否为100,5元的张数乘以5加上2元的张数乘以2,再加上1的张数乘以1,即5*i+2*j+k==100,同时这三种零钱的张数不能为0,由于外循环变量和内循环变量的取值都不为0,因此需要保证k不能为0,如果两个条件表达式与的结果为真,那么输出该方案可行,输出这三种零钱的张数,如果两个条件表达式与的结果为假,那么该方案不可行,内循环是外循环的循环体。具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main(){
    for(int i=1;i<=20;i++){//定义外循环,循环变量i为5元的张数,从1到20 
        for(int j=1;j<=50;j++){//定义内循环,循环变量j为2元的张数,从1到50 
            int k = 50-i-j;//定义1元的张数 
            if((i*5 +j*2+k==100) && (k!=0))//判断零钱面值总和是否为100,并且所有的零钱张数不能为0 
                cout<<i<<' '<<j<<' '<<k<<' '<<endl;
        }
    }
    return 0;
}

http://www.kler.cn/a/460670.html

相关文章:

  • 前端路由layout布局处理以及菜单交互(三)
  • PHP关键字Self、Static和parent的区别
  • StarRocks 存算分离在得物的降本增效实践
  • Linux(Ubuntu)下ESP-IDF下载与安装完整流程(2)
  • 笔记:使用python对飞书用户活跃度统计的一个尝试
  • 时间复杂度与空间复杂度计算方法介绍
  • 【C++】类和对象(中):类的默认成员函数
  • xterm + vue3 + websocket 终端界面
  • [2474].第04节:Activiti官方画流程图方式
  • 【开源免费】基于SpringBoot+Vue.JS安康旅游网站(JAVA毕业设计)
  • spring cloud-skywalking入门指南
  • XShell实现自动化执行脚本.sh文件)(网络安全检查)
  • 2024年的年终总结
  • vue.js 组件通信
  • HTML5实现喜庆的新年快乐网页源码
  • LiteFlow 流程引擎引入Spring boot项目集成pg数据库
  • 初始JavaEE篇 —— Maven相关配置
  • (echarts)ECharts折线图堆叠设置为不堆叠的方法
  • 华为消费级QLC SSD来了
  • TCP粘/拆包----自定义消息协议
  • Python 的 abc 模块 抽象基类(Abstract Base Classes)
  • 建造者模式详解
  • Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析
  • 04、JUC并发编程之:简单概述(四)
  • pg_wal 目录下 wal 日志文件异常累积过大
  • 慧眼识词:解析TF-IDF工作原理