C++程序设计基础:数组应用技巧(一)

题目一:珠心算测验(循环比较)

题目主要应用了循环比较的方法。

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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值