【入门】数组

目录

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

1.题目

​编辑

2.解决分析

3.代码

二、P5729 【深基5.例7】工艺品制作

1.题目

2.解决分析

3.代码

三、P2550 [AHOI2001] 彩票摇奖

1.题目

2.问题分析

3.代码

四、P1554 梦中的统计

1.题目

2.解决分析

3.代码

五、P1614 爱与愁的心痛

1.题目

2.问题分析

3.代码

六、P2911 [USACO08OCT] Bovine Bones G

1.题目

2.问题分析

3.代码

六、P1161 开灯

1.题目

2.问题分析

3.代码

七、P5731 【深基5.习6】蛇形方阵

1.题目

2.问题分析

3.代码


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

1.题目

2.解决分析

1.存储:将路上的所有数都打上标记,表示这个点没有访问过。

2.读入区间的头和尾,从这个区间的头开始循环,到尾结束,标记为访问过。

3.顺序访问路上的树,访问过就变成1(访问过为0)。

4.将标记为0的树加起来就求出还存在的树的数目。

3.代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int l,m;
	cin>>l>>m;
	int start,end;
	int a[10005]={0};
	for(int i=1;i<=m;i++)
	{
		cin>>start>>end;
		for(int j=start;j<=end;j++)
		{
			if(a[j]==0)
			{
				a[j]=1;
			}
		}
	 }
	 int tem=0;
	 for(int i=0;i<=l;i++)
	 {
	 	if(a[i]==0)
	 	{
	 		tem++;
		 }
	 }
	 cout<<tem;
	 return 0;
}

二、P5729 【深基5.例7】工艺品制作

1.题目

2.解决分析

1.存储:设置一个三维数组将每个小方块看成一个小点,默认初始化为0

2.循环:输入需要消除的小方块的范围,将出现的小方块看成点进行标记为1

3.总和:将没有被标记的点(小方块)总和加起来就是剩下的小方块的体积

3.代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int w,x,h;
	cin>>w>>x>>h;
	int q;
	cin>>q;
	int x1,y1,z1;
	int x2,y2,z2;
	int a[50][50][50]={0};
	int tem=0;
	for(int i=1;i<=q;i++)
	{
		cin>>x1>>y1>>z1;
		cin>>x2>>y2>>z2;
		for(int j=x1;j<=x2;j++)
		{
			for(int k=y1;k<=y2;k++)
			{
				for(int l=z1;l<=z2;l++)
				{
					if(a[j][k][l]==0)
					{
						a[j][k][l]=1;
					}
				}
			}
		}
	
	}
	for(int i=1;i<=w;i++)
	{
		for(int j=1;j<=x;j++)
		{
			for(int k=1;k<=h;k++)
			{
				if(a[i][j][k]==0)
				{
					tem++;
				}
			}
		}
	}
	cout<<tem; 
	 return 0;
}

三、P2550 [AHOI2001] 彩票摇奖

1.题目

2.问题分析

1.存储:将中奖号码存储在数组中

2.遍历:输入号码遍历是否对应中奖的号码存入数组中

3.总和:将刚数组中有提及的按奖的排名去累加

3.代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int a[100]={0};
	int tem=0;
	int num;
	int price[10000]={0};
	int b[100]={0};
	for(int i=0;i<7;i++)
	{
		cin>>a[i];
	}
	for(int j=0;j<n;j++)
	{
		tem=0;
		for(int k=0;k<7;k++)
		{
			cin>>num;
			for(int i=0;i<7;i++)
			{
				if(num==a[i])
				{
					tem++;
				}
			}
		}
		price[j]=tem;
	}
	for(int m=0;m<n;m++)
	{
		if(price[m]==7)
		{
			b[0]++;
		}
		if(price[m]==6)
		{
			b[1]++;
		}
		if(price[m]==5)
		{
			b[2]++;
		}
		if(price[m]==4)
		{
			b[3]++;
		}
		if(price[m]==3)
		{
			b[4]++;
		}
		if(price[m]==2)
		{
			b[5]++;
		}
		if(price[m]==1)
		 {
		 	b[6]++;
		 }
	}
	for(int i=0;i<7;i++)
	{
		cout<<b[i]<<" ";
	}
	return 0;
}

四、P1554 梦中的统计

1.题目

2.解决分析

利用除法算出个位数

3.代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,m;
	cin>>n>>m;
	int a[1000]={0};
	for(int i=n;i<=m;i++)
	{
		for(int j=i;j;j/=10)
		{
			a[j%10]++;
		}
	} 
	for(int k=0;k<=9;k++)
	{
		cout<<a[k]<<" ";
	}
	return 0;
}

五、P1614 爱与愁的心痛

1.题目

2.问题分析

利用数组存储

3.代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long n,m;
	cin>>n>>m;
	long long tem=0;
	int a[200000];
	for(long long i=1;i<=n;i++)
	{
		cin>>a[i];
	 }
	 int sum=0;
	 for(long long i=1;i<=m;i++)
	 {
	 	sum+=a[i];
	 }
	 for(long long i=1;i<=n-m+1;i++)
	 {
	 	for(long long k=1;k<=m;k++)
	 	{
	 		tem+=a[i+k-1];
		}
		 if(tem<sum)
		 {
		 	sum=tem;
		 }
		 tem=0;
	 }
	 cout<<sum;
	 return 0;
}

六、P2911 [USACO08OCT] Bovine Bones G

1.题目

2.问题分析

1.存储:数组存储出现次数的频率

2.注意:要求出数组的最大长度(因为这个困住好久)

3.代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int s1,s2,s3;
	int a[100000]={0};
	cin>>s1>>s2>>s3;
	int tem=0;
	int maxn=0;
	int sum=0;
	for(int i=1;i<=s1;i++)
	{
		for(int j=1;j<=s2;j++)
		{
			for(int k=1;k<=s3;k++)
			{
			a[i+j+k]++;
			maxn=max(maxn,i+j+k);
			}
		}
	}
	for(int i=1;i<=maxn;i++)
	{
		if(a[i]>tem)
		{
			tem=a[i];
			sum=i;
		}
	}
	cout<<sum;
	return 0;
}

六、P1161 开灯

1.题目

2.问题分析

1.用数组存储没有关过灯的编号

2.注意要的是整数所以要进行强制类型转换

3.并且要对不关灯的重新定义为0,光是初始化不行

3.代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	double a,t;
	cin>>n;
	int m[2000000]={0};
	for(int i=1;i<=n;i++)
	{
		cin>>a>>t;
		for(double j=1;j<=t;j++)
		{
			if(m[int(j*a)]==0)
			{
				m[int(j*a)]=1;
			}
			else
			{
				m[int(j*a)]=0;
			}
		}
	}
	for(int i=1;;i++)
	{
		if(m[i]==1)
		{
			cout<<i;
			break;
		}
	}
	return 0;
}

七、P5731 【深基5.习6】蛇形方阵

1.题目

2.问题分析

利用二维数组找规律,注意要保证数组不能超出范围。

3.代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int x=1,y=0;
	int k=1;
	int a[15][15]={0};
	while(k<=n*n)
	{
		while(y<n&&!a[x][y+1])
		a[x][++y]=k++;
		while(x<n&&!a[x+1][y])
		a[++x][y]=k++;
		while(y>1&&!a[x][y-1])
		a[x][--y]=k++;
		while(x>1&&!a[x-1][y])
		a[--x][y]=k++;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			printf("%3d",a[i][j]);
		}
		cout<<endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值