假期刷题打卡--Day15

news2024/10/3 4:35:19

1、MT1152韩信又生气了

韩信点兵(大于10人),三个三个一排少1个人,五个五个一排又少1个人,七个七个一排还少1个人。韩信生气了,从别的队伍里调来一个人!这样不管是三个一排五个一排还是七个一排都完美了。问原本最少应该有多少人。

格式

输入格式:

输出格式:

输出整型

样例 1

输入:

输出:

104
解决思路

实质上,这个题目和前面的几个没有太大的区别,只是前面的都说超出,这个说缺少。而解决的时候也不需要太拧巴,只需要逆向思考,既然说3个一排站缺一个,那么就是有一排多出来2个,即余数为2;同理,5个一排少1个,就是有一排多出来4个,即余数为4;7个一排少1个,就是有一排多出来6个。然后就可以写代码了。

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x = 10;
    while(x++){
        if(x%3==2 && x%5==4 && x%7==6){
            cout << x;
            break;
        }
    }
    return 0;
}

2、MT1153真因子

输入正整数N,计算其所有真因子之和。自然数的真因子是严格小于该数的除数。

格式

输入格式:

输入正整数N

输出格式:

输出整型

样例 1

输入:

10

复制

输出:

8
备注

N>2

相关知识点

因子:因子是指能够整除某个整数而不产生余数的数。例如:整数A除B,得出结果是没有余数的整数,就称B是A的因子。

真因子:除了整数本身以外的所有因子。

总结来说:

整数的因子包括它本身和其他能够整除它的整数。但是真因子是指除了整数本身以外的所有因子。换句话说,真因子不包括整数本身。例如,整数12的因子包括1、2、3、4、6和12。其中,真因子是1、2、3、4和6,因为它们都能整除12,而12本身不被认为是真因子。

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int N,sum = 0;
    cin >> N;
    for(int i=1;i<N;i++){
        if(N%i==0){
            sum+=i;
        }
    }
    cout << sum;
    return 0;
}

3、MT1155单位矩阵

输入3X3的整型矩阵A,判断是否为单位矩阵,输出YES或者NO。

格式

输入格式:

输入矩阵,空格分隔

输出格式:

输出YES或者NO

样例 1

输入:

1 0 0 0 1 0 0 0 1

输出:

YES
相关知识点
单位矩阵:(来自百度百科)

        在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,这种矩阵被称为单位矩阵。它是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1。除此以外全都为0。

        在C语言中,赋值操作是从右往左执行的。因此,可以使用这种连续赋值的方式将多个变量赋予相同的值。例如:a=b=c=0;

上述代码会先将0赋值给c,然后将c的值赋值给b,最后将b的值赋值给a,从而使得a、b和c均为0。

二维数组:

定义:二维数组是一种特殊类型的数组,它可以存储多行多列的元素。二维数组可以被看作是一个表格或网格,其中每个元素由两个索引值表示,一个用于指定行号,另一个用于指定列号。

初始化:二维数组的初始化可以按行分段赋值,也可按行连续赋值,也可以使用for语句赋值。
例如,对于数组 a[3][3]。

  • 按行分段赋值应该写作:
a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
  • 连续赋值:
a[3][3]={1,2,3,4,5,6,7,8,9};
  • 使用for语句赋值:
int a[3][3];
for(int i = 0;i < 3;i++){
    for(int j = 0;j < 3;j++){
        scanf("%d",&a[i][j]);
    }
}
break和continue的区别:
  • break:立即终止当前所在的循环(for、while、do-while),并跳出循环体,继续执行循环后的代码。也可以用于终止switch语句的执行。当遇到满足某个条件时,可以使用break语句来提前结束循环,无需等到循环条件不满足或循环次数达到上限。

例:

for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        break;
    }
    printf("%d ", i);
}

当执行上述代码会输出:1 2 3 4。在循环执行到i == 5时,break语句被执行,循环立即终止,不再执行后续的循环体语句。

  • continue:立即跳过当前迭代中循环体内剩余的语句,直接进入下一次迭代。在执行到continue语句时,会停止当前迭代的执行,并进行下一次迭代的判断。

例如同样使用i==5这个条件

for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        continue;
    }
    printf("%d ", i);
}

那么,执行上述代码会输出:1 2 3 4 6 7 8 9 10,在循环执行到i == 5时,continue语句被执行,跳过i==5这个条件,继续下面的循环。

跳出多重循环的一种方法:goto语句(但是并不建议使用,这里只是作为了解

goto 语句允许把控制无条件转移到同一函数内的被标记的语句。

注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法。

C++ 中 goto 语句的语法:

goto label;
..
.
label: statement;
解决思路

 法一:直接按照单位矩阵去判断每个元素是否都满足;

法二:使用矩阵的表示方法,即采用二维数组表示,设一个flag去判断每个变量是否满足单位矩阵的要求。首先将 flag 初始化为1,假设输入的是单位矩阵。然后,在遍历矩阵的过程中,如果发现任何一个不符合单位矩阵定义的元素,就将 flag 置为0,并立即跳出循环。最后根据 flag 的值输出结果。

法三:依旧采用二维数组的方法,但是不设变量,只要判断不符合单位矩阵的条件,直接使用goto语句跳出双重循环。

实现代码

最简单粗暴的办法:

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a1,a2,a3,a4,a5,a6,a7,a8,a9;
    scanf("%d %d %d %d %d %d %d %d %d",&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9);
    if(a1 == 1 && a2 == 0 && a3 == 0 && a4 == 0 && a5 == 1 && a6 == 0 && a7 == 0 && a8 == 0 && a9 == 1 ){
        cout << "YES";
    }else cout <<  "NO";

    return 0;
}

使用flag判断: 

#include <bits/stdc++.h>
using namespace std;

int main() {
    int a[3][3], flag = 1;  // 初始化flag为1,假设是单位矩阵

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            scanf("%d", &a[i][j]);
        }
    }

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (i == j) {
                if (a[i][j] != 1) {  // 对角线上的元素必须为1
                    flag = 0;
                    break;  // 发现不符合条件的元素,直接跳出循环
                }
            } else {
                if (a[i][j] != 0) {  // 非对角线上的元素必须为0
                    flag = 0;
                    break;  // 发现不符合条件的元素,直接跳出循环
                }
            }
        }
        if (flag == 0) {
            break;  // 发现不符合条件的元素,直接跳出外层循环
        }
    }

    if (flag == 1) {
        cout << "YES";
    } else {
        cout << "NO";
    }

    return 0;
}

 使用goto语句跳出双重循环方法(了解):

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a[3][3],flag=0;
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(i==j){
                if(a[i][j]==1){
                    flag=1;
                }else{
                    flag=0;
                    goto cc;
                }     
            }else{
                if(a[i][j]==0){
                    flag=1;
                }else{
                    flag=0;
                    goto cc;
                } 
            }
        }
    }
    cc:
    if(flag==1){
        cout << "YES";
    }else{
        cout << "NO";
    }

    return 0;
}

4、MT1157矩阵相等

输入4X4的整型矩阵A和B,判断是否为相等,输出YES或者NO。

格式

输入格式:

输入矩阵,空格分隔。

输出格式:

输出YES或者NO

样例 1

输入:

4 0 0 0 5 0 0 0 6 1 2 3 4 5 6 7  
4 0 0 0 5 0 0 0 6 1 2 3 4 5 6 7 

输出:

YES
实现代码
#include <iostream>

using namespace std;

void cmp(int a[4][4], int b[4][4]) {
    int flag = 1; // 将flag初始值设为1,表示初始假设两个矩阵相等
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            if (a[i][j] != b[i][j]) {
                flag = 0; // 有至少一个元素不相等,将flag设为0
                break;
            }
        }
        if (flag == 0) {
            break;
        }
    }
    if (flag == 1) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
}

int main() {
    int a[4][4], b[4][4];
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            cin >> a[i][j];
        }
    }
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            cin >> b[i][j];
        }
    }
    cmp(a, b);
    return 0;
}

在写判断语句的时候,没必要每次都去判断正确的情况,有时候反过来思考可能更有效,比如在上面的3、4题当中,判断不等(!=)的情况反而更加方便一点,这里再写一遍第4题就是给自己长长记性。

明天继续吧。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32标准库——(3)GPIO输入

1.按键简介 按键&#xff1a;常见的输入设备&#xff0c;按下导通&#xff0c;松手断开 按键抖动&#xff1a;由于按键内部使用的是机械式弹簧片来进行通断的&#xff0c;所以在按下和松手的瞬间会伴随有一连串的抖动 1.1 硬件电路图 上面两个是外加上拉电阻&#xff08;常用…

一款颜值与实力并存的翻页时钟(免费)

FliTik是一款颜值与实力并存的翻页时钟&#xff0c;安卓端是完全免费的&#xff0c;无任何广告&#xff0c;极简风 &#xff0c;软件默认是12小时制&#xff0c;可以在设置中启用24小时制&#xff0c;并且还支持设置显示秒钟、日期、文案&#xff0c;滴答声和语音报时。 支持横…

[C++开发 02_1/5_ 程序的内存模型(84)]

知识点1&#xff1a;内存分区模型 1.1 程序运行前 命名技巧&#xff1a;c--const(初始化之后不能被修改) g--global&#xff08;全局的&#xff09; l -- local&#xff08;局部的&#xff09; 代码区和全局区都只是在程序运行前的区域。 在程序运行之后才会有栈…

mysql高可用设计,主库挂了怎么办

实际上高可用就是系统能提供的一种无故障服务能力&#xff0c;就是避免宕机出现不能服务的场景。 首先来说对于无状态服务的高可用设计是比较简单的&#xff0c;发现有不能用的就直接停了换别的服务器就行&#xff0c;比如Nginx。这里说一下无状态服务就是不需要记录你的状态、…

玩转WEB接口之一 【HTTP调试测试神器 httpbin使用】

文章目录 一、项目、作者何许人也二、观摩庐山真面目三、怎么玩四、后端怎么调用1. RestTemplate测试代码2. 运行结果 一、项目、作者何许人也 httpbin是大神kennethreitz为搭建测试用的http服务而写的项目&#xff0c;httpbin 这个服务应用能测试HTTP请求及响应的各种信息&am…

什么是框架 确定伦敦金的框架为何重要?

在伦敦金投资中&#xff0c;我们要进行分析或者交易&#xff0c;都要将伦敦金走势置于一个框架内。什么才是框架呢&#xff1f;笔者认为&#xff0c;在当前伦敦金走势的上方和下方画出支撑阻力位&#xff0c;这就是框架。但我们要注意框架得能够立得起来&#xff0c;那才算是好…

Python之线程与进程相关介绍

Python 线程与进程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流&#xff0c;一个进程中可以并发多个线程&#xff0c;每条线程并行执行不同的任务。 使用 threading 模块 …

TCP 状态转换

上图中还没有进行握手的时候状态是关闭的。 三次握手状态的改变&#xff1a; 客户端发起握手。 调用 connect() 函数时状态转化为&#xff1a;SYN_SENT。调用 listen() 函数时状态转换为&#xff1a;LISTEN。ESTABLISHED是被连接的状态。 四次挥手状态的改变&#xff1a; …

实战EDA电子设计自动化经典入门模型VHDL代码编写(含代码解释)上篇--状态机,逻辑设计:Y=AB+C

前言 电子设计自动化&#xff08;EDA&#xff09;&#xff1a; 定义&#xff1a;EDA是用于设计和开发复杂的电子系统&#xff08;如集成电路&#xff09;和印刷电路板的软件工具集合。这些工具通常用于设计电路、进行仿真测试、分析电路行为以及协助制造过程。应用&#xff1a;…

013:获取K线图,增加周期可选

改进《001:如何获取A股个股的前复权K线数据》&#xff0c;增加周期可选。 代码&#xff1a; import tkinter as tk from tkinter import messagebox from tkcalendar import Calendar import pandas as pd import requests from urllib.parse import urlencodedef gen_secid(…

软件设计师——软件工程(五)

&#x1f4d1;前言 本文主要是【软件工程】——软件设计师——软件工程的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304…

颠覆式创新:LAXCUS分布式操作系统7.0

在这轮AI浪潮中&#xff0c;英伟达已经获得了硬件算力入口&#xff0c;Laxcus要获取软件算力入口。 有几位网友想了解我们正在研发的Laxcus分布式操作系统7.0的情况。应他们要求&#xff0c;今天就说说Laxcus 7.0版本。Laxcus 7.0是一个全新的操作系统&#xff0c;具有很多独特…

libjsoncpp 的编译和交叉编译

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

ps---1.使用置入嵌入的智能化对象命令制作拼贴画

ps—使用置入嵌入的智能化对象命令制作拼贴画 素材 步骤 打开背景图 置入嵌入对象&#xff08;置入完&#xff0c;移动到正确的位置&#xff0c;回车或双击&#xff09; 栅格化图层 重复上述步骤制作拼贴画

华硕ASUS K43SD笔记本安装win7X64(ventoy为入口以支撑一盘多系统);友善之臂mini2440开发板学习

记录 老爷机 白色 华硕 K43SD 笔记本 安装 win7X64 1. MBR样式常规安装win7X64Sp1 (华硕 K43SD 安装 win7X64 ) 老爷机 白色 华硕 K43SD 笔记本 安装 win7X64 (常规安装) 设置: 禁用UEFI 启用AHCI ventoy制作MBR(非UEFI)方式的启动U盘 U盘中放cn_windows_7_ultimate_wit…

全桥变压器计算2

1 根据输入最高电压与磁通密度计算出来原边的圈数 2 根据输入输入电压计算出来原副边圈数 3 输入功率计算 4 根据输入功率计算DC输出的平均值,有效值,峰值电流 5根据副边电感感量,然后写出励磁电感的表达式 6 根据写出理想变压器原边绕组电流表达式<

瀑布流布局 (初版)

瀑布流布局 文章目录 瀑布流布局前言1. 背景2. 点⬇️&#x1f517;去体验效果如下图所示&#xff1a; 一、初版waterfall布局和问题暴露&#xff1f;1.效果图如下&#xff1a;2.暴露问题如下图所示&#xff1a;第一张问题图&#xff1a;第二张问题图&#xff1a; 3.HTML代码如…

Linux的权限(三)

目录 共享文件夹 分析一 补充内容 分析二 粘滞位 共享文件夹 分析一 在普通用户yyf中创建一个目录test&#xff1a; 普通用户yyf在test目录中创建yyf类的文件&#xff0c;超级用户root在该目录中创建root.txt类的文件&#xff08;从拥有者和所属组上来看只有root可以对这…

博弈论(牛客练习赛)

思路&#xff1a;我们考虑小念赢 1、如果n>1并且p0&#xff0c;小念可以连续取两次&#xff0c;相当于小念有挂&#xff0c;可以从必败态转为必胜态&#xff0c;必赢。 2、如果n>1并且m>n-1&#xff0c;小念第一次取n-1个&#xff0c;小念必赢。 代码&#xff1a; …

【覆盖率类型 覆盖策略覆盖组_2023.01.26】

覆盖率类型 覆盖率&#xff1a;衡量设计验证的完备性 代码覆盖率 检测对设计代码运行程度的衡量&#xff0c;达到100%并不代表验证的工作已经完成&#xff08;可能某些功能并未设计&#xff09; line coverage paths coverage toggle coverage//所有变量都有过0&#xff0c…