循环结构 7-4 找出最小值

news2024/11/15 12:23:08

 

分数 20

全屏浏览题目

切换布局

作者 颜晖

单位 浙大城市学院

本题要求编写程序,找出给定一系列整数中的最小值。

输入格式:

输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。

输出格式:

在一行中按照“min = 最小值”的格式输出n个整数中的最小值。

输入样例:

4 -2 -123 100 0

输出样例:

min = -123

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

我的答案:

分析过程:

  1. 读取数据:首先我们需要读取一个整数n,表示后续的整数个数。然后,我们读取这n个整数。

  2. 找出最小值:当我们读取每个整数时,我们需要比较它是否小于当前的最小值。如果是,那么更新最小值。对于第一个读取的整数,由于它是第一个,我们直接将它设置为最小值。

  3. 输出结果:最后,我们输出找到的最小值。

解题过程:

  1. 为了找到最小值,我们设定一个变量min来保存当前找到的最小值。

  2. 遍历输入的所有整数。对于每个整数:

    • 如果它是我们读取的第一个整数,直接将它设置为min
    • 否则,如果它比min小,更新min
  3. 遍历完所有整数后,输出min

以上的实现和解题过程旨在寻找一组整数中的最小值,并按照指定格式输出。

法一 输一个比一个

C语言:

#include <stdio.h>

int main() {
    int n, i, min, num;
    
    scanf("%d", &n);
    
    for(i = 0; i < n; i++) {
        scanf("%d", &num);
        if (i == 0 || num < min) {
            min = num;
        }
    }
    
    printf("min = %d\n", min);
    return 0;
}

C++:

#include <iostream>
using namespace std;

int main() {
    int n, min, num;
    
    cin >> n;
    
    for(int i = 0; i < n; i++) {
        cin >> num;
        if (i == 0 || num < min) {
            min = num;
        }
    }
    
    cout << "min = " << min << endl;
    return 0;
}

法二 动态规划和动态数组:

分析:

  1. 使用mallocnumbers数组分配了动态内存。这允许我们在运行时决定数组的大小。

  2. 遍历整个数组以找到最小的数字。

  3. 输出找到的最小值。

  4. 在程序结束前,我们使用free释放了我们之前动态分配的内存。这是非常重要的,否则可能导致内存泄漏。

C语言:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n;
    scanf("%d", &n);

    // 动态分配内存给整数数组
    int *numbers = (int *)malloc(n * sizeof(int));
    if (numbers == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }

    // 读取所有的整数到动态数组中
    for(int i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    int min = numbers[0];  // 初始设定第一个数字为最小值
    for(int i = 1; i < n; i++) {
        if(numbers[i] < min) {
            min = numbers[i];
        }
    }
    
    printf("min = %d\n", min);

    // 不要忘记释放动态分配的内存
    free(numbers);

    return 0;
}

C++:

#include <iostream>
#include <vector>
#include <algorithm>  // for std::min_element
using namespace std;

int main() {
    int n;
    cin >> n;

    vector<int> numbers(n);  // 定义一个大小为n的vector

    // 读取所有的整数
    for(int i = 0; i < n; i++) {
        cin >> numbers[i];
    }
    
    // 使用algorithm库中的min_element函数找到最小值的迭代器
    int min_value = *min_element(numbers.begin(), numbers.end());
    
    cout << "min = " << min_value << endl;
    
    return 0;
}

总结:

这道题目在首看之下可能相对简单,但通过其实现和分析,我们可以学到许多编程和算法设计方面的知识和技巧:

1. **基本算法设计**:这道题目涉及到的基础算法是线性搜索。我们在一个数据集中进行遍历,寻找某个特定的值(在这里是最小值)。学习如何有效地进行线性搜索是算法设计的基石。

2. **动态内存分配**:
   - 在C++中,我们学习了如何使用`vector`作为动态数组来存储数据。
   - 在C语言中,我们了解了如何使用`malloc`和`free`进行动态内存分配与释放。

3. **库函数的应用**:在C++的实现中,我们学习了如何使用`std::min_element`来简化查找最小值的过程。这强调了标准库的强大功能和它们如何可以简化我们的代码。

4. **代码的健壮性**:在动态内存分配时,需要检查`malloc`是否成功。如果内存分配失败,我们需要适当地处理,以避免程序崩溃或产生未定义的行为。

5. **资源管理**:在使用`malloc`分配内存后,我们必须确保最后使用`free`释放内存。这强调了资源管理的重要性,特别是在使用低级语言如C语言时。

6. **程序效率**:在这种简单的问题中,我们可以开始思考效率的问题。例如,是否有必要将所有数字存储在数组中?或者我们可以只遍历它们一次并立即找到最小值?

7. **问题简化**:有时候,为了解决问题,我们不必采用复杂的数据结构或算法。在这个案例中,一个简单的线性扫描就足够了。

8. **输入输出格式**:对于任何编程问题,正确理解和遵循输入输出格式都是非常关键的。这需要仔细阅读题目要求并确保你的程序按照规定的格式进行输入和输出。

总之,尽管这道题目在表面上可能看起来很简单,但它为初学者提供了一个宝贵的学习机会,涵盖了从基本算法设计到资源管理等多个重要概念。

 

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

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

相关文章

[零刻]EQ12 N100 迷你主机:从开箱到安装ESXi+虚拟机

开箱先上图&#xff1a; 配置详情&#xff1a; EQ12采用了Intel最新推出的N100系列的处理&#xff0c;超低的功耗&#xff0c;以及出色的CPU性能用来做软路由或者是All in one 相当不错&#xff0c;CPU带有主动散热风扇&#xff0c;在长期运行下散热完全不用担心&#xff0c;性…

企业如何开展个人信息安全影响评估(PIA)二

基本概念 根据《信息安全 技术个人信息安全影响评估指南》&#xff08;GB/T 39335—2020&#xff1b;personal information security impact assessment&#xff0c;简称“PIA”&#xff09;&#xff0c;个人信息安全影响评估是指针对个人信息处理活动&#xff0c;检验其合法合…

【Redis】什么是缓存穿透,如何预防缓存穿透?

【Redis】什么是缓存穿透&#xff0c;如何预防缓存穿透&#xff1f; 缓存穿透是指查询一个一定不存在的数据&#xff0c;由于缓存中不存在&#xff0c;这时会去数据库查询查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到数据库去查询&#xff0c;这…

数据可视化diff工具jsondiffpatch使用学习

1.jsondiffpatch 简介 jsondiffpatch 是一个用于比较和生成 JSON 数据差异的 JavaScript 库。它可以将两个 JSON 对象进行比较&#xff0c;并生成一个描述它们之间差异的 JSON 对象。这个差异对象可以用于多种用途&#xff0c;例如&#xff1a; 生成可视化的差异报告应用差异…

【系统架构设计专业技能 · 数据库设计(二)【系统架构设计师】

系列文章目录 系统架构设计专业技能 软件工程&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估&#xff08;…

小程序商品如何指定打印机

有些商家&#xff0c;可能有多个仓库。不同的仓库&#xff0c;存放不同的商品。当客户下单时&#xff0c;小程序如何自动按照仓库拆分订单&#xff0c;如何让打印机自动打印对应仓库的订单呢&#xff1f;下面就来介绍一下吧。 1. 设置订单分发模式。进入管理员后台&#xff0c…

AutoSAR系列讲解(深入篇)13.7-Mcal Adc配置(上)

目录 一、AdcGeneral 二、AdcSafety 三、AdcConfigSet 在之前的章节中,咱们在Port的配置中讲解了工具的初步使用与一些技巧;在Dio的配置中讲解了生成的代码的内容;在mcu的配置里讲解了外部一些 第三方简便工具的使用。这一次咱们配合ADC模块,就详细的讲讲每个配置项的作…

Java --- 二维数组

一、二维数组的定义 public class TwoArrayTest {public static void main(String[] args) {//二维数组声明与初始化//方式1&#xff1a;静态初始化int[][] arr new int[][]{{1,2,3},{1,2,3},{1,2,3}};//方式2&#xff1a;动态初始化int[][] arr2 new int[3][3];arr2[0][1] …

Windows小记

一、域控制器升级的先决条件验证失败。 新建域时&#xff0c;本地 Administrator 帐户将成为域 Administrator 帐户。无法新建域&#xff0c;因为本地 Administrator 帐户密码不符合要求。 目前&#xff0c;本地 Administrator 帐户不需要密码。我们建议你使用网络用户命令行工…

微软Win11 Dev预览版Build23526发布

近日&#xff0c;微软Win11 Dev预览版Build23526发布&#xff0c;修复了不少问题。牛比如斯Microsoft&#xff0c;也有这么多bug&#xff0c;所以你写再多bug也不作为奇啊。 主要更新问题 [开始菜单&#xff3d; 修复了在高对比度主题下&#xff0c;打开开始菜单中的“所有应…

LLaMA-7B微调记录

Alpaca&#xff08;https://github.com/tatsu-lab/stanford_alpaca&#xff09;在70亿参数的LLaMA-7B上进行微调&#xff0c;通过52k指令数据&#xff08;https://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json&#xff09;&#xff0c;在8个80GB A100上训…

rn和flutter出现“Running Gradle task ‘assembleDebug

在第一次运行rn和flutter时&#xff0c;会卡在Running Gradle task assembleDebug&#xff0c;可以使用阿里的镜像&#xff0c;如下图&#xff1a; maven { url https://maven.aliyun.com/repository/google/ } google() maven { url https://maven.aliyun.com/repository/jcen…

pointnet C++推理部署--tensorrt框架

classification 如上图所示&#xff0c;由于直接export出的onnx文件有两个输出节点&#xff0c;不方便处理&#xff0c;所以编写脚本删除不需要的输出节点193&#xff1a; import onnxonnx_model onnx.load("cls.onnx") graph onnx_model.graphinputs graph.inpu…

使用SSH隧道将Ubuntu云服务器Jupyter Notebook端口映射到本地

本文主要实现了在Ubuntu云服务器后台运行Jupyter Notebook&#xff0c;并使用SSH隧道将服务器端口映射到本地 1. 生成配置文件 运行以下命令生成Jupyter Notebook的配置文件&#xff1a; jupyter notebook --generate-config这将在用户主目录下生成一个名为.jupyter的文件夹&…

微人事 登录问题完善

重启服务端的时候&#xff0c;发现前端页面会操作不了&#xff0c;这样后端session会失效&#xff0c;我们就需要让页面重新跳转到登录页 springsecurity配置类后端配置 前端拦截器进行拦截跳转

【Git】分支管理

文章目录 一、理解分支二、创建、切换、合并分支三、删除分支四、合并冲突五、合并模式六、分支策略七、bug分支八、强制删除分支 努力经营当下 直至未来明朗&#xff01; 一、理解分支 HEAD指向的是master分支&#xff0c;master中指向的是最新一次的提交&#xff0c;也就是m…

T113-S3-TCA6424-gpio扩展芯片调试

目录 前言 一、TCA6424介绍 二、原理图连接 三、设备树配置 四、内核配置 五、gpio操作 总结 前言 TCA6424是一款常用的GPIO&#xff08;通用输入输出&#xff09;扩展芯片&#xff0c;可以扩展微控制器的IO口数量。在T113-S3平台上&#xff0c;使用TCA6424作为GPIO扩展芯…

使用 Elasticsearch 轻松进行中文文本分类

本文记录下使用 Elasticsearch 进行文本分类&#xff0c;当我第一次偶然发现 Elasticsearch 时&#xff0c;就被它的易用性、速度和配置选项所吸引。每次使用 Elasticsearch&#xff0c;我都能找到一种更为简单的方法来解决我一贯通过传统的自然语言处理 (NLP) 工具和技术来解决…

leetcode 198. 打家劫舍

2023.8.19 打劫问题是经典的动态规划问题。先设一个dp数组&#xff0c;dp[i]的含义为&#xff1a;前 i 个房屋能盗取的最高金额。 每间房屋无非就是偷&#xff0c;或者不偷这两种情况&#xff0c;于是可以写出递推公式&#xff1a; …

使用nrm快速切换npm源以及解决Method Not Implemented

文章目录 什么是nrm如何使用nrm查看本机目前使用的npm 源安装nrm查看可选源查看当前使用源切换源添加源删除源测试源的响应时间 如果你遇到这个报错&#xff0c;就可以采用这种方案解决哦解决方案&#xff1a;1. 切换为官方源2. 查看漏洞3. 修复漏洞4. 下面命令慎重使用&#x…