文章目录
- 前言
- 一、小鱼比可爱
- 二、小鱼的数字游戏
- 三、冰雹猜想
- 四、校门外的树
- 五、旗鼓相当的对手
- 六、旗鼓相当的对手
- 总结
前言
本节主要学习一维数组 和 多维数组 后边的知识我觉得 可以试着了解并不要求你掌握这么难的题目 因为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 和 字符串的使用,拭目以待吧!