《洛谷深浅》第五章---数组与数据批量存储

在这里插入图片描述


前言

本节主要学习一维数组 和 多维数组 后边的知识我觉得 可以试着了解并不要求你掌握这么难的题目 因为ACM更多都是思维题目 所以这里把重要的题目掌握就可以了。
剩下的题目 自己配合着书中的讲解 自行学习。
在这里插入图片描述


一、小鱼比可爱

洛谷p1428—小鱼比可爱
在这里插入图片描述

解题思路:首先肯定是利用for循环先遍历每一条鱼,然后再 从遍历到的 这条鱼前面从新开始遍历 然后进行比较 发现满足 没有我可爱的时候 就计数的++ 然后从头到我 遍历完成后 输出计数的值。

代码如下:

#include<iostream>
using namespace std;
int n,a[101];//全局变量自动初始化为0
//这里多开1个数组是为了防止数组越界
int main()
{
    
    
	cin>>n;
	
	for(int i=0;i<n;++i)//输入小鱼的可爱值
		cin>>a[i];
	
	for(int i=0;i<n;i++)//遍历小鱼 
	{
    
    
		int cnt=0;//计数
		for(int j=0;j<i;j++)//从头到我这条鱼遍历
		{
    
    
			if(a[j]<a[i]) cnt++;//满足条件 就cnt++
		}
		cout<<cnt<<" ";//输出没我可爱的鱼的个数
	}
	return 0;
}

二、小鱼的数字游戏

P1427 小鱼的数字游戏 题目如下:

在这里插入图片描述
解题思路:开一个数组,然后倒着输出就可以了

代码如下:

#include<iostream>
using namespace std;
int a[110],n,i;
//多开10个数组和上一题目一样 防止数组越界
int main()
{
    
    
	cin>>n;
	while(n)
	{
    
    
		a[i++]=n;//存放到数组里面
		cin>>n;
	}
	//倒着输出
	for(int j=i-1;j>=0;--j) cout<<a[j]<<" ";
	//cout<<endl;
	return 0;
}

三、冰雹猜想

P5727 【深基5.例3】冰雹猜想题目如下:

在这里插入图片描述
解题思路: 开一个数组用来储存 计算的每一个数字变化的过程 然后方便输出 后面就是处理数字变化 其实就根据题目 要求 是偶数怎样 是奇数怎样 变化就可以了

代码如下

#include<iostream>
using namespace std;
int n,book[201],i;
int main()
{
    
    
	cin>>n;
	while(n!=1)
	{
    
    
		book[i++]=n;
		if(n%2==0) n/=2;//偶数操作
		else n=3*n+1;//奇数操作
	}
	book[i]=1;//把最开始的1存储进去
	for(int j=i;j>=0;j--) cout<<book[j]<<" ";//输出
	return 0;
}

四、校门外的树

P1047 [NOIP2005 普及组] 校门外的树

在这里插入图片描述
解题思路: 把树利用数组初始化为0 然后把要砍掉的树设置成为数字1 然后遍历数组就可以了 看谁是0 谁是1

代码如下

#include<iostream>
using namespace std;
const int N=10010;
int tree[N]={
    
    0};
int l,m;//左边右边
int main()
{
    
    
    cin>>l>>m;
    while(m--)
    {
    
    
        int u,v;
        cin>>u>>v;
        for(int i=u;i<=v;++i)
        {
    
    
            tree[i]=1;
        }
    }
    int sum=0;
    for(int i=0;i<=l;i++)
    {
    
    
        if(tree[i]==0) sum++;
    }
    cout<<sum<<endl;//输出结果
    return 0;
}

五、旗鼓相当的对手

P5728 【深基5.例5】旗鼓相当的对手
在这里插入图片描述
解题思路:比较简单就是按照题目输入 然后用给的判断条件 进行判断 输出

代码如下:

#include<iostream>
#include<cmath>
using namespace std;
int n,a[3][1001],ans;
int main()
{
    
    
	cin>>n;
	for(int i=1;i<=n;++i)
		cin>>a[0][i]>>a[1][i]>>a[2][i];
	for(int i=1;i<=n-1;++i)
		for(int j=i+1;j<=n;++j)
		if(abs(a[0][i]-a[0][j])<=5 
		 &&abs(a[1][i]-a[1][j])<=5
		 &&abs(a[2][i]-a[2][j])<=5
		 &&abs(a[0][i]+a[1][i]+a[2][i]-a[0][j]-a[1][j]-a[2][j])<=10)
		ans++;
	cout<<ans<<endl;
	return 0;
}

六、旗鼓相当的对手

P3397 地毯
在这里插入图片描述
解题思路:算法可以用差分算法 但是基础算法就是 依次加上去就行了,会比较基础很容易想到

代码如下:

#include<iostream>
using namespace std;
int a[1001][1001]={
    
    0},m,n,i,j,k,x1,x2,y1,y2;
int main()
{
    
    
    cin>>n>>m;
    for(k=1;k<=m;++k)
    {
    
    
        cin>>x1>>y1>>x2>>y2;
        for(i=x1;i<=x2;++i)
        	for(j=y1;j<=y2;++j)
        	++a[i][j];
    }
    for(i=1;i<=n;++i)
    {
    
    
        for(j=1;j<n;++j)
       	 cout<<a[i][j]<<' ';
        cout<<a[i][n]<<endl;
    }
    return 0;
}

总结

本节学习了数组的相关知识题目的练习,我相信你对数组的了解会更加的深入!
下一节我会讲解string 和 字符串的使用,拭目以待吧!

猜你喜欢

转载自blog.csdn.net/congfen214/article/details/131750649
今日推荐