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

本文详细介绍了数组的基本概念和操作,包括定义、赋值、索引,以及数组的输入输出。接着讨论了一维数组的最大值和最小值的求解方法,并提供了计算数组元素和、偶数和的示例。此外,还涵盖了数组的插入、删除、查找、合并以及有序合并等操作。最后,文章通过斐波那契数列、苹果摘取问题、翻纸牌游戏和寻找数组中和为特定值的元素等例子展示了数组在实际问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、一维数组认识与使用

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;
    } 

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐樽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值