小樽C++ 单章③ 一维数组

news2024/11/13 15:10:50

目录

一、一维数组认识与使用

1.4 数组的输入与输出

1.5 最大值与最小值的求解

二、一维数组的操作用法

2.1 数组的插入与删除

2.2 数组某个值的查找

2.3多个数组的合并

2.4多个数组的有序合并

三、一维数组的应用

3.1 斐波那契数列

3.2 淘淘摘苹果

3.3 翻纸牌游戏

3.4 判断数组元素是否存在某两个元素之和为 k。


一、一维数组认识与使用

数组的意思:数组相等于一排座椅,可以坐很多人。每个座椅的位置都不一样。
数组存数据,就相当座椅做了人。

1.1 定义数组: int b[10] // 意思是a数组最多可存10个整数。

1.2 数组赋值:  int a[10]={1,2,3,4,5,6}; //还剩下的空间,默认补0。

1.3 数组的索引/下标从0开始。

问a[0]值      ; a[2]值      ; a[4]值      ; a[6]值      


1.4 数组的输入与输出

输入很多个值存到数组里面,那需要在循环里面操作。

例如:1.先定义数组,在循环输入。

#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n; // 输入n个数 
	int a[n+1];
	for(int i=0;i<n;i++){ 
		cin>>a[i]; // 数组的输入 
	}
	cout<<endl; 
	for(int i=0;i<n;i++){  
		cout<<a[i]<<" "; // 数组的输出
	}
	return 0;
}

 问,当输出的循环i不从0开始,改成i=1,那输出结果会怎么样?

炼1:请实现数组中所有元素的和,并且输出总和结果。

炼2:请实现数组中所有元素是偶数的和,并且输出总和结果。

炼3:请实现数组的倒序输出,例如输入 1 2 3 4; 输出 4 3 2 1。

/*
1. 定义一个长度为7的数组c,
2. 把7个数值存到数组c里面,
3. 统计数组c所有元素的偶数和 。
*/
#include<iostream> 
using namespace std;
int main(){
	int c[7]; 
	for(int i=0;i<7;i++){
		cin>>c[i];
	}
	int sum=0;
	for(int i=0;i<7;i++){
		if(c[i]%2==0){
			sum += c[i];
		}
	}
	cout<<"数组偶数和:"<<sum;
	return 0;
}

// 3.请倒序输出数组a。
#include<iostream> 
using namespace std;
int main(){
	float a[10] = {3.14,77.88,66.88,3,9,5,22.5};
	// 倒序1 
	for(int i=6;i>=0;i--){
		cout<<a[i]<<" ";
	}
	cout<<endl; 
	// 倒序2
	for(int i=0;i<7;i++){
		cout<<a[6-i]<<" ";
	}
	return 0;
}

1.5 最大值与最小值的求解

1.定义一个长度为10的数组a并赋值;
2.求数组元素最大值与最小值,求极差(最大值-最小值)。

#include<iostream> 
using namespace std;
int main(){
	float a[10] = {3.14,77.88,66.88,3,9,5,22.5};
	float max,min;
	for(int i=0;i<7;i++){
		//判断最大最小值
		if(i==0){	//假设第一个元素为最大值 
			max = a[i];
			min = a[i];
		}
		else{ // 从第二、三个..第n个比较大小 
			if(max<a[i]){ // 如果第一个元素小于后面数组元素 
				max=a[i]; // 进行交换元素,保证 max为最大值 
			}
			if(min>a[i]){ 
				min=a[i];
			}
		}
	}
	cout<<"最大值:"<<max<<endl;  
	cout<<"最小值:"<<min<<endl; 
	cout<<"极差:"<<max-min<<endl; // 极差 
	return 0;
}


二、一维数组的操作用法

2.1 数组的插入与删除

#include<iostream>
using namespace std;
int main(){
	//实现数组的插入操作 
	int a[6]={1,2,3,5,6};
	for(int i=5;i>3;i--){ //循环为什么要倒序?   
		a[i]=a[i-1]; //让后面数组值往后挪了
	}
	// 插入4到索引3的位置{1,2,3,4,5,6}
	a[3]=4;
	
	//删除索引1的值
	for(int i=1;i<5;i++){ //循环是正序?
		a[i]=a[i+1]; //让后面数组值往前挪,覆盖掉前的值 
	}
	// 输出
	for(int i=0;i<5;i++){ 
		cout<<a[i]<<" ";
	} 
	return 0;
} 


2.2 数组某个值的查找

1.在数组存了15个值。 需要先定义数组变量,再循环输入15个值。

2.输入一个值用变量a存储,循环里面逐个判断数组元素值跟a是否相等,是就输出该数组元素的索引位置!并循环结束。

#include<iostream>
using namespace std;
int main(){
	int arr[15];
	for(int i=0;i<15;i++){ 
		cin>>arr[i];
	}
	int a;
	cin>>a;
	for(int i=0;i<15;i++){ 
		if(a==arr[i]){
			cout<<"索引位置:"<<i<<endl;
			return 0;
		}
	}
	return 0;
}


2.3多个数组的合并

将数组a[]和数组b[]合并到数组c[]。

#include <iostream>
using namespace std;
int main(){
    int a[3] = {35, 72, 96};
    int b[4] = {29, 33, 56, 87};
    int c[7];//将数组a[]和数组b[]合并到数组c[]
    int len=0;
    for(int i=0;i<3;i++){
        c[len]=a[i];
        len++;
    }
    for(int j=0;j<4;j++){
        c[len]=b[j];
        len++;
    }
    for(int i=0;i<len;i++){
    	cout<<c[i]<<" ";
    }
    return 0;
}


2.4多个数组的有序合并

将有序的的数组a,b合并到c数组,并且c数组也是有序数组。

#include <iostream>
using namespace std;
int main(){
    int a[3] = {1, 3, 5};
    int b[4] = {4, 5, 6, 7};
    int c[10];
    int lena = 0, lenb = 0, lenc = 0;
    // 因为 a, b 数组是有序的,所以最小的元素一定是数组最左边的数字,
	// 所以我们只要比较当前 a, b 数组的头,选择小的放入 c 数组即可
    while (lena < 3 && lenb < 4){
        if (a[lena] < b[lenb]){
            c[lenc] = a[lena];
            lena++;
            lenc++;
        } else {
            c[lenc] = b[lenb];
            lenb++;
            lenc++;
        }
    }
    //接下来考虑一件事,必然有一个数组中的元素先被放完,
	//那另外一个数组中剩下的元素我们只要依次放进 c 数组就可以了
    cout<<"------"<<endl;
    cout<<"a:"<<lena<<" b:"<<lenb<<" c:"<<lenc<<endl;
	cout<<"------"<<endl;
	while (lena < 3){
        c[lenc] = a[lena];
        lena++;
        lenc++;
    }
    while (lenb < 4){
        c[lenc] = b[lenb];
        lenb++;
        lenc++;
    }
    
    // 此时 c数组中的元素为
    for(int i=0;i<lenc;i++){
        cout<<c[i]<<" ";
    }
    return 0;
}


2.5查找数组元素有重复

输入n个值存到数组里面,请找出数组元素有重复的值。

#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int a[n+1];
	for(int i=0;i<n;i++){ // 输入 
		cin>>a[i];
	}

	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){ //判断 
			if(a[i]==a[j]){
				cout<<"重复值:"<<a[j]<<" ";
			}
		}
	}
    return 0;
}

  


 

三、一维数组的应用

3.1 斐波那契数列

斐波那契数列:第一项、第二项都是1,第3项为前两项的和,以此类推第4项就是 第2、3项的和。 1 1 2 3 5 8 13 21

#include<iostream>
using namespace std;
int main(){
	int k;
	cin>>k;
	long long a[k+1];
	for(int i=0;i<k;i++){
	    if(i<2){
	        a[i] = 1; 
	        cout<<a[i]<<" ";
	    }
	    else{
	        a[i] = a[i-1] + a[i-2];
	        cout<<a[i]<<" ";
	    }
	}
	return 0;	 
} 


3.2 淘淘摘苹果

 

#include<iostream>
using namespace std;
int main(){
	int a[10];
	int cnt=0;
	for(int i=0;i<10;i++){
		cin>>a[i];
	} 
	int h;
	cin>>h;
	for(int i=0;i<10;i++){
		if(h+30>=a[i]){
			cnt++;
		}
	}
	cout<<cnt;
	return 0;
} 

3.3 翻纸牌游戏

五年级一班全体学生做一个游戏,有 nn 张纸牌,每张纸牌上分别标注着 1、2、3、4…n个数字,初始时纸牌数字面朝上。全班同学先将 1的倍数的纸牌翻过来,然后再将 2 的倍数的纸牌再翻过来,一直翻到 n 的倍数的纸牌。统计翻到最后数字面向下的纸牌分别是哪些?

例如,有 1、2、3 张纸牌,开始时纸牌数字面朝上,第一次翻转 1 的倍数,将所有序号为 1 的倍数的纸牌翻转;第二次翻转 2 的倍数,将所有序号是 2 的倍数的纸牌再翻转;第三次翻转 3 的倍数,将所有序号是 3 的倍数纸牌再翻转,翻牌到此结束。最后数字面向下的纸牌是序号为 1 的那张。

输入格式

输入第一行输入数字为 n,表示有 n 张纸牌。

//翻纸牌  
#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int a[10000];
	for(int i=1;i<=n;i++){
		a[i]=1; //初始 牌朝上为 1 
	}
	for(int i=1;i<=n;i++){ //遍历所有牌 
		for(int j=i;j<=n;j++){ //第几张牌进行判断 
			if(j%i==0){//倍数判断 
				a[j] *= -1; 
			}
		}
	}
	for(int i=1;i<=n;i++){  
		if(a[i]==-1){ //对朝下的牌进行输出 
			cout<<i<<" ";
		}
	}
	return 0;	
}


3.4 判断数组元素是否存在某两个元素之和为 k。

  • 1. 判断 第一个元素+第二个元素==K?,没有就 第一个元素+ 第3、5、6个元素到最后一个。
  • 2. 完了之后,判断 第二个跟后面元素相加再比较,以此类推 第3个元素跟后面比,直到最后一个元素停止。
    #include<iostream>
    using namespace std;
    int main(){
    //	数组里面找重复的值。
    	int n;
    	cout<<"n个数:";
    	cin>>n;
    	int a[n]; // 多少人存在数组里面 
    	for(int i=0;i<n;i++){ //存数值 
    		cin>>a[i];
    	}
    //解决:第一个元素 与第二、三...最后元素判断比较
    	int k;
    	cout<<"k值:";
    	cin>>k;
    	for(int i=0;i<n;i++){ // i 第一个元素
    		for(int j=i+1;j<n;j++){ // j跟i相加
    			if(a[i]+a[j]==k){
    				cout<<a[i]<<"+"<<a[j]<<"="<<k<<endl;
    			}
    		}
    	} 
    	return 0;
    } 

     

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

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

相关文章

RTOS中互斥量的原理以及应用

互斥量的原理 RTOS中的互斥量是一种同步机制&#xff0c;用于保护共享资源&#xff0c;防止多个任务同时访问该资源&#xff0c;从而避免数据竞争和不一致性。 互斥量的原理是通过对共享资源进行加锁和解锁操作来实现的。 在RTOS中&#xff0c;互斥量通常是一个数据结构&…

为什么说要慎用BeanUtils,因为性能真的拉跨

1 背景之前在专栏中讲过“不推荐使用属性拷贝工具”&#xff0c;推荐直接定义转换类和方法使用 IDEA 插件自动填充 get / set 函数。不推荐的主要理由是&#xff1a;有些属性拷贝工具性能有点差有些属性拷贝工具有“BUG”使用属性拷贝工具容易存在一些隐患&#xff08;后面例子…

九龙证券|磷酸亚铁锂是什么?磷酸亚铁锂的特点和性能介绍

磷酸亚铁锂是一种新式锂离子电池电极资料&#xff0c;化学式&#xff1a;LiFePO4&#xff0c;磷酸亚铁锂为近来新开发的锂离子电池电极资料&#xff0c;首要用于动力锂离子电池&#xff0c;作为正极活性物质运用&#xff0c;人们习气也称其为磷酸铁锂。 磷酸亚铁锂的特色和功能…

【计算机网络】随机访问介质访问控制中的ALOHA协议、CSMA协议、CSMA/CD协议和CSMA/CA协议

二、随机访问介质访问控制 信道上的所有用户可随机发送信息 1. 简单ALOHA协议 解决信息发送时的冲突问题。其特点是不监听信道&#xff0c;不按时间槽发送&#xff0c;随机重发。 思想&#xff1a;在超时后&#xff0c;等随机一段时间后再重传 2. 时隙ALOHA协议 时隙ALOH…

送给她最最浪漫的表白(Python代码实现)

目录I 最美的浪漫 II 昨日浪漫的表白III 关于“美”的哲思 IV Python代码实现 I 最美的浪漫 II 昨日浪漫的表白 她问:有一个问题&#xff0c;我只问一遍&#xff0c;为什么是我?我微微一笑答道:笞案很长&#xff0c;我要用一生来回答。我&#xff1a;图书馆旁边的星空真美&…

Linux面试总结

一.常用命令1.目录切换cd / 切换到根目录cd ../ 切换到上级目录cd ~ 切换到home目录2.查看目录ls 列出当前目录下所有的文件ls [路径]ls / 查看根目录 ls -l 相当于 ll 最常用的命令,用了表的方式列出当前目录的内容3.查看当前目录pwd-4.创建一组空文件touch5.显示文件内容cat6…

Maven打包操作

对于企业级项目&#xff0c;无论是进行本地测试&#xff0c;还是测试环境测试以及最终的项目上线&#xff0c;都会涉及项目的打包操作。对于每个环境下的项目打包&#xff0c;对应的项目所需要的配置资源都会有所区别&#xff0c;实现打包的方式有很多种&#xff0c;可以通过an…

【Linux】进程理解与学习(Ⅰ)

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;相关文章推荐&#xff1a;【Linux】冯.诺依曼体系结构与操作系统进程概念什么是进程&#xff1f;进程是什么&#xff1f;我们打开任务管理器可以看到有…

Flex弹性布局一文通【最全Flex教学】

文章目录一.Flex布局1.1 传统布局和flex布局1.1.1 传统布局1.1.2 flex弹性布局1.2 flex初步体验1.3 布局原理二.常见Flex属性2.1 常见父项属性2.2 flex-direction主轴的方向2.3 justify-content设置主轴上的子元素排列方式2.4 设置子元素是否flex-wrap换行2.5 align-itmes设置侧…

数列的极限

数列的极限的定义&#xff1a; 当正多边形的边数越来越多时&#xff0c;正多边形的面积越来越接近于圆的面积。 这个过程就叫做极限。 数列的形式&#xff1a; 数列的每一个下标对应一个数列元素值。 认识数列 这就是4个数列的表现形式。 当数列的下标无限增长时&#xff0c…

记录--uni-app中安卓包检查更新、新版本下载、下载进度条显示功能实现

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 需求描述 如果想要做一个app的话&#xff0c;可以有很多种选择方案&#xff0c;uni-app是其中的一个性价比高一些(坑多一些)的方案。本文记录一下&#xff0c;uni-app打安卓包以后&#xff0c;需要检查…

【操作系统】如何避免预读失效和缓存污染的问题?

【操作系统】如何避免预读失效和缓存污染的问题&#xff1f; 文章目录【操作系统】如何避免预读失效和缓存污染的问题&#xff1f;Linux 和 MySQL 的缓存Linux 操作系统的缓存MySQL 的缓存传统 LRU 是如何管理内存数据的&#xff1f;预读失效&#xff0c;怎么办&#xff1f;什么…

bash if 判断及特殊字符

bash if 判断 1)字符串判断 str1 str2     当两个串有相同内容、长度时为真 str1 ! str2     当串str1和str2不等时为真 -n str1       当串的长度大于0时为真(串非空) -z str1       当串的长度为0时为真(空串) str1        当串str1为非…

华为OD机试题,用 Java 解【众数和中位数】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

Spark DPP

Spark DPP分区剪裁动态分区剪裁DPP (Dynamic Partition Pruning&#xff0c;动态分区剪裁) : 过滤维度表后&#xff0c;能削减事实表的数据扫描量&#xff0c;提升关联计算的执行性能 分区剪裁 需求 &#xff1a;统计所有头部用户贡献的营业额&#xff0c;并按照营业额倒序排…

体验 Linux 音频驱动

目录 一、音频接口简介 1、音频编解码芯片 2、 WM8960 3、I2S总线接口 二、硬件原理图 三、音频驱动使能 三、使能内核的 WM8960 驱动 1、取消 ALSA 模拟 OSS API 2、使能 I.MX6ULL 的 WM8960 驱动 验证 四、alsa-lib 和 alsa-utils 移植 1、alsa-utils 移植 ①、开…

AUTOSAR知识点Com(四):CANIf接收

1、概述 根据AUTOSAR BSW架构&#xff0c;接收到的数据将在上层通信模块&#xff0c;即AUTOSAR COM、CanNm、CanTp和DCM中进行评估和处理。这意味着&#xff0c;上层模块既不能使用CanDrv的缓冲区&#xff0c;也不能访问CanIf的缓冲区。只有当CanIfPublicReadRxPduDataApi设置为…

自考本科计算机网络原理(04741)历年大题真题【18年10月-22年10月】

文章目录一、简答题&#xff08;历年真题&#xff09;18年10月-22年10月历年简答题出题情况分析2018年10月2019年4月2019年10月2020年8月2020年10月2021年4月2021年10月2022年4月2022年10月二、综合题&#xff08;历年真题&#xff09;2018年10月2019年4月2019年10月2020年8月2…

javaFunction函数,函数式接口,HashMap中的computeIfAbsent() 方法的使用

由于平时很少用到这种写法&#xff0c;导致每次看到有一脸懵逼&#xff0c;然后一段时间就要总结复习一次。。。。。。如图所示???这是什么牛马写法? Function<String, String> toUpperCase str -> str.toUpperCase();仔细分析一下&#xff0c;这因该要新建一个对…

Allegro如何使用自带的功能更改差分的线宽和间距操作指导

Allegro如何使用自带的功能更改差分的线宽和间距操作指导 在做PCB设计的时候,有时候PCB已经完成了布线,但是因为某些原因更改了层叠导致了差分的线宽和间距发生了变化,导致差分需要重新走一遍,如下图 如果差分数量比较多,重走是比较费时间的,Allegro自身有快速更新差分线…