首页 > 其他分享 >lc

lc

时间:2023-09-27 18:12:29浏览次数:45  
标签:commands lc int break while 循环 condition

有关循环的基本知识

三种基本的循环

1. while

while (expression:condition) {
    commands;
}

2. do while

do {
    commands;
} while (expression:condotion);

上述代码等效于

commands;
while (exp:condition) {
    commands;
}

3. for

for (exp:init ; exp:condition ; exp:increment) {
    commands;
}

上述代码等效于

exp:init
while (exp:condition) {
    commands;
    exp:increment;
}

特别的:for循环的三个语句可以部分或者全部为空
例如:

for (;;) {
    commands;
}

上述for循环的三个表达式全部为空
该循环如果没有 break 语句,将是一个死循环

break & continue

break

break 表示退出当前循环(也就是break外的第一个循环)

continue

continue表示结束单次循环,继续下一轮循环

breakcontinue都必须在循环内,否则编译错误 (compile error)

循环嵌套

循环嵌套本身没有什么特别的地方,就是循环里面还有一个循环,例如:

while (condition A) { //loop A
    //something
    while (conditionB) { //loop B
        //someting2
    }
    //somting3
}

在上述例子中,每一次循环A的内容是循环B(以及一些可能有的其他代码)

循环嵌套语法不难,真正的难点在于想明白每层循环的条件 (condition) 和语句
作为初学者,可以尝试先想明白每一步要做什么,然后再去写代码

一些例子

数组的遍历 (Traversal)

数组的遍历,就是按照一定的顺序访问数组的每一个元素

数组的遍历一般用for循环完成

遍历一个数组,输出每一个元素

//已知一维数组a中包含n个元素
for (int i=0;i<n;i++) { //注意数组的索引从0开始
    cout<<a[i];
}

多组输入数据的处理

许多题目的输入包含多组输入数据,而处理多组数据实际上就是在循环进行一个相同的步骤

输入多组整数a、b,输出a+b。当a、b均为0是标志输入结束。不要处理结束标志

int a,b;
cin>>a>>b;
while (a!=0 || b!=0) {
    cout<<a+b;
    cin>>a>>b; //将输入放在循环后面,可以方便在输入后马上判断a、b是否为零
}

当然也可以这样写:

int a,b;
while (true) { //while (1)也可以
    cin>>a>>b;
    if (a==0 && b==0) {
        break;
    }
    cout<<a+b;
}

其实还可以这样写:

int a,b;
//逗号隔开的表达式,从左到右先后处理,最后只取最后一个表达式的值
while (cin>>a>>b , (a!=0 || b!=0)) {
    cout<<a+b;
}

上述三种代码的共同点在于输入后马上判断a、b是否为0
这是为了符合题目中 “结束标志不处理” 的要求

判断质数

输入一个正整数,判断它是不是质数

int n;
cin>>n;
bool ok=true;
//质数的标志在于处1和自身外没有约数
for (int i=2;i<n;i++) {
    if (n%i == 0) { //n除以i等等0表示:i是n的约数(或者说:n可以被i整除)
        ok=false;
        break; //找到一个约数就已经不是质数了。之后的循环已经没有意义
    }
}
if (ok) {
    printf("Yes");
}
else {
    printf("No");
}

上述代码有优化方案,以后再说

题目

3-A

题目描述

In the online judge system, a judge file may include multiple datasets to check whether the submitted program outputs a correct answer for each test case. This task is to practice solving a problem with multiple datasets.
Write a program which reads an integer x and print it as is. Note that multiple datasets are given for this problem.

  • 输入

The input consists of multiple datasets. Each dataset consists of an integer x in a line.
The input ends with an integer 0. You program should not process (print) for this terminal symbol.

  • 输出

For each dataset, print x in the following format:
Case i: x
where i is the case number which starts with 1. Put a single space between "Case" and i. Also, put a single space between ':' and x.

讲解

注意到题目中有多组数据,所以要用到循环
而且题目还有求输出数据的编号i,所以for循环是比较符合本题的 (自然的,while也可以)

for (int i=1;;i++) {
    cin>>n;
    if (n==0) {
        break;
    }
    cout<<"Case "<<i<<": "<<x<<endl; //注意空格!!!
}

特别强调:文本比较类的题目,输出必须和题目要求一模一样,空格不能少不能多,大小写不能错,全半角不能错。一个字符的错误,哪怕意思是一样的,也会导致答案错误 (Wrong Answer)
特别的,忽略行末空格和文末换行

3-D

题目描述

Write a program which reads three integers a, b and c, and prints the number of divisors of c between a and b (included) .

  • 输入

The input consists of multiple datasets . Each dataset consists of two integers a, b and c separated by a single space.
The input ends with three 0 (when both a, b and c are zero). Your program should not process for these terminal symbols.

  • 输出

Print the number of divisors in a line.

讲解

部分词语翻译
divisor 约数
between a and b (included) 闭区间[a, b]

如何体现 “约数”

num % i == 0 //代码A

如何求约数数量?循环!

//代码B
int ans=0;
for (int i=a;i<=b;i++) {
    if (代码A) {
        ans++; //相当于ans=ans+1
    }
}

又注意到题目要求处理多组数据,而多组数据的处理是用循环实现的。也就是需要循环执行代码B

while (proper condition) {
    proper input;
    代码B
}

标签:commands,lc,int,break,while,循环,condition
From: https://www.cnblogs.com/Illyasviel/p/17733337.html

相关文章

  • PX01如何通过LcdTools读取IC值自动生成初始化代码
    在点屏调试中我们会碰到这种情况,一个已经烧录过全代码的屏在没有获取他的全代码的情况下,怎么从IC里面读取生成初始化代码下到其他屏?LcdTools可以完美解决上述问题,下面举例说明操作过程。首先,我们需要熟悉DriverIC,有哪些寄存器地址,如何进行寄存器读写,我们以ILI9881C为例;ILI988......
  • RGB LCD drive
    modulelcd_drive#(parameterVBP=31,//OKparameterVFP=11,//OKparameterVSW=3,//OKparameterVDP=480,parameterHBP=41,//okparameterHFP=114,//okparameterHSW=4,//okparameterHDP=640)(clk_i,//时钟输......
  • 利用SPI实现全自动化——LCD屏与RGB灯
     如果你开启了广告屏蔽,请将博客园加入白名单,帮助博客园渡过难关,谢谢! 前言在21年做物理实验和23年客串电赛之后,我带着STM32重回电子DIY界。这次的项目是一个电池供电的补光灯,由于用途更偏向艺术创作而非严肃照明,选用了WS2812RGB灯带;控制灯带的参数需要呈现给用户,通过LCD屏的......
  • sqlalchemy之append
    在SQLAlchemy中,append方法通常用于将一个对象添加到关系属性中,特别是在多对多(Many-to-Many)或一对多(One-to-Many)关系中。这个方法的用途是向关系属性添加一个新的关联对象,以建立关系。在多对多关系中,通常有一个中间表来表示两个模型之间的关系。append方法用于将一个对象添加......
  • Comparing QCN9274 and QCN9074: WPA3 Support in Qualcomm Wi-Fi Chips
    EnhancingIndustrialWirelessSecuritywithWPA3-CapableRouterBoardsandNetworkCardsIntoday'sindustriallandscape,wirelessconnectivityplaysapivotalroleinoptimizingoperations,monitoringequipment,andfacilitatingdataexchange.Howeve......
  • CAD设计软件下载-CorelCAD 2020官网版 各个版本下载
    CorelCAD2014是Corel公司推出的一款强大CAD制图工具,使用CorelCAD,用户可以轻松创建专业的CAD图形,CorelCAD使用DWG格式作为其主要的图形文件格式,最高支持版本为2014的DWG和DXF文件,提供了与全球范围内大量图形软件和建筑软件的兼容性和交换功能;新版本优化了基于功能区的用户......
  • Qt PLC Modbus通信
    项目介绍有一个项目需要PC和PLC通信,PLC通信协议是Modbus协议。前两天研究了一下,QT源码也有例程,不过源码读了有点懵,参考了别人的博客,实现了一个简单的通信Demo,测试可以对PLC内部寄存器和中间继电器读写。软件版本和程序总览QT:5.12.12Kits:MSVC2017PLC:信捷XD5软件预览:软件介绍......
  • Linux-Stream内存带宽及MLC内存延迟性能测试方法
    1、Stream内存带宽测试  Stream是业界主流的内存带宽测试程序,测试行为相对简单可控。该程序对CPU的计算能力要求很小,对CPU内存带宽压力很大。随着处理器核心数量的增大,而内存带宽并没有随之成线性增长,因此内存带宽对提升多核心的处理能力就越发重要。Stream具有良好的空间局部......
  • Qt 5.12.9 + VS 2019配置并实现与三菱Q系列PLC通讯(1)软件的安装
    本人最近配置了QT5.12.9+VS2019,并实现了与三菱Q系列PLC通讯并实现数据交互的基本功能,在这个对中间遇到的一些问题和过程进行文字说明,以后大家有用到相关功能的话可以避免一些不必要的问题~需要安装的软件有三个:QT5.12.9、VS2019、MXComponetS4.19QT安装首先是对......
  • STM32之LCD显示
    LCD学习资料:【正点原子】手把手教你学STM32HAL库开发全集LCD基础知识LCD(LiquidCrystalDisplay),即液晶显示器,由:玻璃基板、背光、驱动IC等组成全彩LCD,是一种全彩显示屏(RGB565、RGB888),可以显示各种颜色LCD接口分类:接口分辨率特性MCU≤800*480自带SRAM,无需......