数组的应用技巧(一)
题目一:珠心算测验(循环比较)
题目主要应用了循环比较的方法。
1. 题目说明
1.1 题目描述
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
1.2 输入输出
输入格式
共两行,第一行包含一个整数n,表示测试题中给出的正整数个数。
第二行有n个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
输出格式
一个整数,表示测验题答案。
输入输出样例
输入 #1
4
1 2 3 4
输出 #1
2
1.3 说明/提示
【样例说明】
由1+2=3,1+3=4故满足测试要求的答案为22。
注意,加数和被加数必须是集合中的两个不同的数。
【数据说明】
对于100%的数据,3 ≤ n ≤ 100,测验题给出的正整数大小不超过10,000。
2. 代码与解答
#include <iostream>
using namespace std;
//总体思路为用大小为20000的数组记录该数是否满足条件,满足则加一,否则置零。
int main()
{
int L[105],cun[105],judge[20005]={};//20005由于最大值是10000+10000=20000; 初始化数组为零的方法。
int n,count=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>L[i];
cun[i] = L[i];
}
for(int j=0;j<n-1;j++)
{
for(int k=j+1;k<n;k++)
{
for(int x=0;x<n;x++)
{
if(L[x]==L[j]+L[k])
{
judge[L[x]]++;
if(judge[L[x]]==1)//这里注意,同一个数有可能是两组甚至多组数的和,但只算一次
{
count++;
}
}
}
}
}
cout<<count<<endl;
return 0;
}
题目二:统计天数(交换技巧)
题目主要应用了交换的技巧,简化了数组的使用。
1. 题目说明
1.1 题目描述
炎热的夏日,KC 非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。
经历千辛万苦,他收集了连续 N(1<N<106)的最高气温数据。
现在,他想知道最高气温一直上升的最长连续天数。
1.2 输入输出
输入格式
第 1 行:一个整数 NN 。1≤N≤106
第 2 行:N个空格隔开的整数,表示连续 N天的最高气温。0≤最高气温109 。
输出格式
1 行:一个整数,表示最高气温一直上升的最长连续天数。
输入输出样例
输入 #1
10
1 2 3 2 4 5 6 8 5 9
输出 #1
5
2. 代码与解答
2.1方法一:定义大数组
#include <iostream>
using namespace std;
long long L[1000005];
int main()
{
long n;
int tem=1;
int max=0;
int count=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>L[i];
}
for(int j=0;j<n;j++)
{
if(L[j+1]>L[j])
{
tem++;
}
else
{
max = max>tem?max:tem;
tem=1;
}
}
cout<<max<<endl;
return 0;
}
2.2方法二:直接用两个数交换统计
#include <iostream>
using namespace std;
int main()
{
int N,lonst=0,zero=0,a=0,b=-1,num=0;
cin>>N;
for(int i=0;i<N;i++)
{
a = b;
cin>>b;
if (a<b) num++;
else if(a>=b)
{
lonst = lonst>num?lonst:num;
num = 1;
}
}
cout<<lonst;
return 0;
}