NO.22十六届蓝桥杯备战|一维数组|七道练习|冒泡排序(C++)

第十六届蓝桥杯大赛软件赛(编程类)知识点大纲 难度:[1-3]难度:[1-5]难度:[1-3]难度:[2-5]难度:[1-5] 阅读详情
AI摘要

本文围绕十六届蓝桥杯备战,介绍了洛谷上七道一维数组练习题,如查找特定值、数组逆序等。强调做题时要注意数据存放起始下标、数组空间开辟,避免越界,大数组建议设为全局数组。还讲解了冒泡排序的原理。

B2093 查找特定的值 - 洛谷
  • 题⽬要求下标是从0开始的,和数组的下标是吻合的,存放数据应该从下标0开始
  • n的取值范围是1~10000
  • 数组中存放的值的绝对值不超10000,说明int类型就⾜够了
  • 找到了输出下标,找不到要输出-1,这⼀点要注意,很容易忽略
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<int> arr(n);
    for(auto &x : arr)
    {
        cin >> x;
    }
    int a;
    cin >> a;
    int i = 0;
    int flg = true;
    for(auto x : arr)
    {
        if (a == x)
        {
            cout << i << '\n';
            flg = false;
            break;
        }
        i++;
    }
    if (flg)
    {
        cout << -1 << '\n';
    }
    
    return 0;
}
#include <iostream>  
using namespace std;  

const int N = 10010;  
int arr[N];  

int main()  
{  
	int n = 0;  
	cin >> n;  
	for (int i = 0; i < n; i++)  
	{  
		cin >> arr[i];  
	}  
	int k = 0;
	cin >> k;  
	
	int i = 0;  
	for (i = 0; i < n; i++)  
	{  
		if (k == arr[i])  
		{  
			cout << i << endl;  
			break;  
		}  
	}  
	if (i == n)  
		cout << -1 << endl;  
	
	return 0;  
}
  1. 有的题⽬要求数据从下标0的位置开始存放,也有些题⽬要求数据是从下标1的位置开始存放,要仔细阅读题⽬。让从下标1开始存放的时候,数组的开辟必须要有多余的空间使⽤,如果开辟的刚刚好就会越界。
  2. 数组空间的开辟要⾜够,以免数据越界,所以经常题⽬需要存放n个数据,就开辟n+10个空间,这样空间就⾮常充⾜,⽐较保险。其实在空间⾜够的情况下,浪费⼀点空间是不影响的。动态规划相关算法,⼀般都会预留好空间。
  3. ⼀般数组较⼤的时候,建议将数组创建成全局数组,因为局部的数组太⼤的时候,可能会导致程序⽆法运⾏,刷题多了就⻅怪不怪了。全局变量(数组)是在内存的静态区开辟空间,但是局部的变量(数组)是在内存的栈区开辟空间的,每个程序的栈区空间是有限的,不会很⼤。
B2089 数组逆序重存放 - 洛谷
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<int> a(n);
    for (auto &x : a)
    {
        cin >> x;    
    }
    int left = 0, right = n - 1;
    while (left <= right)
    {
        int tmp = a[left];
        a[left] = a[right];
        a[right] = tmp;
        left++;
        right--;
    }
    for (auto x : a)
    {
        cout << x << ' ';        
    }
    
    return 0;
}
#include <iostream>  
using namespace std;  

int arr[110] = { 0 };  

int main()  
{  
	int n = 0;  
	cin >> n;  
	int i = 0;  
	for (i = 0; i < n; i++)  
		cin >> arr[i];  
	//逆序  
	int left = 0;  
	int right = n - 1;  
	while (left < right)  
	{  
		int tmp = arr[left];  
		arr[left] = arr[right];  
		arr[right] = tmp;  
		left++;  
		right--;  
	}  
	for (i = 0; i < n; i++)  
		cout << arr[i] << " ";  
	
	return 0;  
}
#include <iostream>
using namespace std;  

int arr[110] = { 0 };  

int main()  
{  
	int n = 0;  
	cin >> n;  
	int i = 0;  
	for (i = 0; i < n; i++)  
		cin >> arr[i];  
	//逆序输出  
	for (i = n - 1; i >= 0; i--)  
		cout << arr[i] << " ";  
	
	return 0;  
}
B2091 向量点积计算 - 洛谷
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<int> a(n);
    for (auto &x : a)
    {
        cin >> x;        
    }
    vector<int> b(n);
    for (auto &x : b)
    {
        cin >> x;        
    }
    int ans = 0;
    for (int i = 0; i < n; i++)
    {
        ans += a[i] * b[i];
    }
    cout << ans << '\n';

    return 0;
}
#include <iostream>  
using namespace std;  

const int N = 1010;  
int arr1[N];  
int arr2[N];  

int main()  
{  
	int n = 0;  
	cin >> n;  
	for (int i = 0; i < n; i++)  
	{  
		cin >> arr1[i];  
	}
	for (int i = 0; i < n; i++)  
	{  
		cin >> arr2[i];  
	}  
	int ret = 0;  
	for (int i = 0; i < n; i++)  
	{
		ret += arr1[i] * arr2[i];  
	}  
	cout << ret << endl;  
	
	return 0;  
}
#include <iostream>  
using namespace std; 

const int N = 1010;  
int arr1[N];  

int main()  
{  
	int n = 0;  
	int m = 0;  
	cin >> n;  
	for (int i = 0; i < n; i++)  
	{  
		cin >> arr1[i];  
	}  
	int ret = 0;
	for (int i = 0; i < n; i++)  
	{  
		cin >> m;  
		ret += arr1[i] * m;  
	}  
	cout << ret << endl;  
	
	return 0;  
}
B2090 年龄与疾病 - 洛谷
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> p(n);
    for (auto &x : p)
    {
        cin >> x;        
    }
    //0-18 、 19-35 、 36-60、 61
    int c = 0, t = 0, a = 0, o = 0;
    for (auto x : p)
    {
        if (x >= 0 && x <= 18)
            c++;
        if (x > 18 && x <= 35)
            t++;
        if (x > 35 && x <= 60)
            a++;
        if (x > 60)
            o++;
    }
    printf("%.2f%%\n", c * 100.0 / n);
    printf("%.2f%%\n", t * 100.0 / n);
    printf("%.2f%%\n", a * 100.0 / n);
    printf("%.2f%%\n", o * 100.0 / n);
    
    return 0;
}

这组数据不存储下来也是可以的,因为只有⼀组数据,所以⼀边读取,⼀边统计也是可以的,这样省略了数组空间的开销

#include <iostream>  
using namespace std;  

int n;  
int num;  
int p1, p2, p3, p4;  

int main()
{  
	cin >> n;  
	int i = 0;  
	//输⼊⼀个处理⼀个  
	for (i = 0; i < n; i++)  
	{  
		cin >> num;  
		
		if (num >= 0 && num <= 18)  
			p1++;  
		else if (num >= 19 && num <= 35)  
			p2++;  
		else if (num >= 36 && num <= 60)  
			p3++;  
		else  
			p4++;  
	}  
	printf("%.2f%%\n", p1 * 1.0 / n * 100);  
	printf("%.2f%%\n", p2 * 1.0 / n * 100);  
	printf("%.2f%%\n", p3 * 1.0 / n * 100);  
	printf("%.2f%%\n", p4 * 1.0 / n * 100);  
	
	return 0;  
}

题⽬要求输出的是百分⽐,是带%的,这个要特殊处理⼀下

B2092 开关灯 - 洛谷

![[Pasted image 20250301201059.png]]

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

const int N = 5010;
int a[N] = {0};

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;

    for(int i = 2; i <= n; i++)
    {
        for (int j = i; j <= n; j++)
        {
            if (j % i == 0)
            {
	            //arr[j] = !arr[j];
                if(a[j] == 1)
                    a[j] = 0;
                else
                    a[j] = 1;
            }
        }
    }
    for (int i = 1; i <= n; i++)
    {
        if (a[i] == 0)
            cout << i << ' ';
    }
    cout << endl;

    return 0;
}
P1428 小鱼比可爱 - 洛谷
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<int> a(n);
    for (auto &x : a)
    {
        cin >> x;        
    }
    for (int i = 0; i < n; i++)
    {
        int cnt = 0;
        for (int j = 0; j < i; j++)
        {
            if (a[j] < a[i])
            {
                cnt++;
            }
        }
        cout << cnt << ' ';
    }
    
    return 0;
}
冒泡排序

冒泡排序的原理:通过重复地遍历待排序的数列,依次⽐较相邻元素并交换,使得每⼀轮遍历都将未排序部分的最⼤或最⼩值“冒泡”到数列的⼀端
![[Pasted image 20250301213245.png]]

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

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n;
	cin >> n;
	vector<int> a(n);
	for (auto &x : a)
	{
		cin >> x;
	}
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < n - 1 - i; j++)
		{
			if (a[j] < a[j + 1])
			{
				int tmp = a[j];
				a[j] = a[j+1];
				a[j+1] = tmp;
			}
		}
	}
	for (auto x : a)
	{
		cout << x << endl;
	}

	return 0;
}
冒泡排序:一场数字间的“冒泡”大战 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端,但是在广泛适用后,冒泡排序可以用来排任意顺序。 阅读详情

相关推荐

YOLOv8魔改网络后训练全零?别慌,关掉AMP混合精度训练试试

本文探讨了YOLOv8魔改网络后训练出现全零指标的问题,指出AMP混合精度训练与自定义网络结构的不兼容性。通过分析梯度消失现象和AMP工作原理,提供了关闭AMP、调整学习率等解决方案,并建议预防性开发实践以避免类似问题。

weixin_28338005的博客 322

C++数组练习

C++数组练习!

qq_41135440的博客 1702

OpenHarmony系统参数权限配置避坑指南:从param get/set失败到SELinux标签实战

本文深入解析OpenHarmony系统参数权限配置的常见问题与解决方案,涵盖DAC和SELinux双重权限控制机制。通过实战案例演示如何配置`param get/set`权限,解决'Permission denied'错误,并提供三方应用访问参数的安全方案,帮助开发者高效完成系统调试与优化。

weixin_27013291的博客 449

C++冒泡法函数例题

用冒泡法编写一个对一维数组进行降序排序的函数sort()。再定义一个输出函数print()。在主函数中定义一维整型数组a[N](N=10),用键盘输入10个整数并赋给数组a[N],调用sort()和print().

weixin_46355469的博客 587

RTKLIB使用方法(喂饭版)(三)——RTKPOST

应用OTL校正需要在“files”的“ocean loading BLQ format”中配置OTL文件。应用极潮需要在“files”的“EOP data file”配置ERP(地球旋转参数)文件。RAIM FDE:设置是否启用RAIM(接收机自主完整性监控)FDE(故障检测和排除)功能。点击下方的“save”可以把配置保存成文件,点击“load”就可以把配置文件加载出来。4接收机动态模型/地球潮汐矫正:设置流动站接收机动力学模型,只可以使用在DGPS/DGNSS或动态模型中。选择流动站天线的类型。

A2020713的博客 1万+

实验5 振幅调制(集成乘法器幅度调制电路)

目录5-1 振荡调制的基本工作原理一.振幅调制和调幅波1.普通调幅波(AM)(1)调幅波的表达式、波形(2)调幅波的频谱2.抑制载波双边带调幅(DSB)3.抑制载波单边带调幅(SSB)二.普通调幅波的产生电路三.抑制载波调幅的产生电路5-2 振幅调制实验电路 5-1 振荡调制的基本工作原理 根据电磁波理论知道,只有频率较高的振荡才能被天线有效地辐射。但是人的讲话声音变换为相应电信号的频率较低,不适于直接从天线上辐射。因此,为了传递信息,就必须将要传递的信息“记载”到高频振荡上去。这一“记载”过程称为调

胡毛毛的博客 3万+

C++数组(简单练习)

C++数组基础练习

m0_65334471的博客 2763

微调实操一: 增量预训练(Pretraining)

《微调入门篇:大模型微调的理论学习》我们对大模型微调理论有了基本了解,这篇结合我们现实中常见的场景,进行大模型微调实操部分的了解和学习,之前我有写过类似的文章《实践篇:大模型微调增量预训练实践(二)》利用的MedicalGPT的源码在colab进行操作, 由于MedicalGPT代码比较难以理解,而且模型只能从hugging face上下载,对于一些国内服务器无法访问,我重构了代码,让训练代码更有可读性,并参考LLAMAFactory的项目,增加了modelscope上下载模型,轻松在国内服务器运行.

youbingchen的博客 6993

C++:一维数组认识与应用 (含题)

1、一维数组初认识、求和、平均、极差;增删改查合并; 应用题: 斐波那契数列、找重复值、翻纸牌游戏、判断数组元素是否存在某两个元素之和为 k。

博樽 3041

医图论文 Arxiv‘24 | 自我先验引导的 Mamba-UNet 网络在医学图像超分辨率中的应用

作者提出了一种自我先验引导的 Mamba-UNet 网络(简称 SMamba-UNet)用于医学图像超分辨率。现有方法主要基于卷积神经网络(CNNs)或 Transformer。基于 CNN 的方法无法捕捉长距离依赖关系,而基于 Transformer 的方法由于其二阶计算复杂度,面临沉重的计算挑战。最近,状态空间模型(SSMs)尤其是 Mamba 出现了,它能够以线性计算复杂度建模长距离依赖。

小白学视觉 262

英伟达 Jetson AGX Thor 官方入门教程(二)CUDA、Docker、JetPack 设置

本文详细介绍了NVIDIA Jetson AGX Thor开发套件的安装与配置流程。主要内容包括:1) BSP安装的三种方法(Jetson ISO、SDK Manager和Linux刷写脚本)及其适用场景;2) Docker环境的完整配置步骤及测试方法;3) CUDA工具包的两种安装方式(容器化和原生安装)及其性能对比;4) JetPack SDK的安装选项。文章提供了详细的命令行操作指南和故障排除建议,帮助开发者快速搭建AI开发环境,充分发挥Jetson平台的硬件性能优势。

机器人控制与仿真应用 1733

C++实战(三)冒泡排序+两个案例

练习案例1:五只小猪称体重 案例描述:一组数据中记录了五只小猪的体重,找出并打印最重的小猪

Pinospot的博客 1718

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

备战第十六届蓝桥杯——知识点大纲

备战第十六届蓝桥杯——知识点大纲

红目香薰 3481

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

编程基础之一维数组 C++练习

C++一维数组练习

Lukegood的博客 1366

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

bilibiliC++44数组-—维数组案例-五只小猪称体重

练习案例1:五只小猪称体重 案例描述: 在一个数组中记录了五只小猪的体重,如:int arr[5] = {300,350,200,400,250}; 找出并打印最重的小猪体重。 #include<iostream> #include<ctime> using namespace std; int main() { int arr[5] = { 300,350,200,400,250 }; int max = arr[0]; int i = 0; int sz = sizeof

aiqq136的博客 423

C++一维数组练习

输入五题的答案,与正确答案作比较,正确输出为“ ”,错误输出为“*”并统计正确率,直到输入ctr+z结束程序 #include "stdafx.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { const char key[]={'a','d','b','b','c'}; const int Num=5; ...

Hans的博客 3296

【C++保姆级入门】一维数组基础详解+习题巩固

新手必学会的教程—— 一维数组基础教程

iecne的博客 1981

C++学习笔记16——一维数组的定义,数组名,练习

数组 概述: 所谓数组,就是一个集合,里面存放了相同类型的数据元素 特点1:数组中每个元素都是相同的数据类型 特点2:数组是由连续的内存位置组成的 一维数组——一维数组的定义方式 一维数组定义的三种方式: 1.数据类型 数组名[数组长度]; 2.数据类型 数组名[数组长度] = {值1,值2...}; 3.数据类型 数组名[ ] = {值1,值2...}; [ ]里面的数字为下标,可以通过下标来访问数组中的元素 示例: #include <iostream> using namespace st

weixin_49522114的博客 760

C++基础语法5:数组案例----一维数组

请声明一个5个元素的数组,并且将元素逆置.(如原数组元素为:1,3,2,5,4;逆置后输出结果为:4,5,2,3,1);在一个数组中记录了五只小猪的体重,如 : " int arr[5] = {300,350,200,400,250};2.对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。3.重复以上的步骤,每次比较次数-1,直到不需要比较。示例:将数组{4,2,8,0,5,7,1,3,9}进行升序排序。如果第一个比第二个大,就交换他们两个。作用:最常用的排序算法,对数组内元素进行排序。

qq_63388834的博客 678

必刷算法题之排序篇(题目及代码)---C++

第一题:排序 解法一:(冒泡排序) class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型vector 待排序的数组 * @return int整型vector */ vector<int> MySort(vector<int>& arr) { //vect

qq_40077565的博客 1万+

c++实现冒泡排序和快速排序

上一篇博客中对插入排序进行了分析介绍,接下这里对冒泡排序和快速排序进行深入的分析介绍。冒泡排序和快速排序有个统称叫作“交换排序”,叫作交换排序的原因很容易理解,因为冒泡排序和快速排序都是通过多次交换两个数的位置从而达到排序的效果。接下来让我们好好理解下如何通过交换两个数的位置最终达到排序的效果。 注:介绍算法时仍然使用上一节用到的数据int a[10] = { 45, 12, 36, 76, 4

bian_qing_quan11的博客 2018

C++一维数组练习 洛谷

【代码】C++一维数组练习 洛谷。

万物皆C++ 1180

C++练习16:冒泡排序

C++练习16:冒泡排序题目思路代码参考文章 题目 用户输入N个实数,使用冒泡排序方法对这N个元素排序,输出排序后的数据。 思路 两两比较待排序序列中的元素,并交换不满足顺序要求的各对元素,直至全部满足顺序要求为止 代码 #include <iostream> using namespace std; int main(){ int i, j, temp, moves = 0,N = 10; int nums[N] = {22,5,67,98,45,32,101,99,73,10}

大家好,欢迎来到鱼尾的博客! 904

C++冒泡排序(2)

下面N行,每行为一个整数,表示从第 1个小朋友到第N个朋友分别写的数。(假设所有人成绩都不相等) 输入 第一行一个整数n代表学生总人数(n<=100) 第二行,有n个整数,代表n个语文成绩(这些成绩 都是0~100之间的分数) 第三行一个整数x代表小明同学的语文成绩 输出 一个整数,代表小明同学的名次 样例。输入 第一行,一个整数n,代表本次考试的总人数(5<=n<=100) 第二行n个整数,代表n个人的语文成绩(这n个人的分数是无序的) 输出 语文成绩前5名同学的平均分(结果保留1位小数) 样例。

BanyeBirth的博客 848

车厢重组(c++题解)

一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。3 2 1 5 7 4 ------3步。2 1 3 5 7 4 ------2步。1 2 3 5 7 4 ------1步。1 2 3 5 4 7 ------1步。1 2 3 4 5 7 ------1步。分析:这是交换排序的模板。

hb_zhyu的博客 598
上一篇: NO.21十六届蓝桥杯备战|一维数组|范围for|memset|memcpy(C++)
下一篇: 0.QT概述|下载|配置环境
ChoSeitaku
博客等级 码龄5年 3452粉丝 557原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值