#P2033. 计算机笔试复习题.4

计算机笔试复习题.4

三、完善程序题

(1) 双指针移动

给出一串正整数数列以及一个正整数 C 要求计算出所有满足 A-B=C 的数对的个数( 不同位置的数字一样的数对算不同的数对 )。

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
long long a[maxn];
int main()
{
	long long n,c;
	scanf("%lld%lld",&n,&c);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
		
	sort(a+1,a+1+n);
	long long ans=0;
	long long temp;
	填空(1);
	for(int r=1;r<=n;r++){
		while(a[r]-a[l]>c){
			l++;
		}
		temp=0;

		while( 填空(2) ){
			r++;
			temp++;
		}

		if(temp) 填空(3);

		int p=l;
		while(temp&&a[l]==a[p]){
			填空(4);
			填空(5);
		}
	}

	cout<<ans<<endl;
	return 0;
}
  1. 填空(1) 应填 {{ select(1) }}
  • int l = 0
  • int l = 1
  • temp = 0
  • temp = 1
  1. 填空(2) 应填 {{ select(2) }}
  • a[r]-a[l] == c
  • a[r]-a[l] < c
  • a[r]-a[l] != c
  • a[r]-a[l] <=c
  1. 填空(3) 应填{{ select(3) }}
  • l++
  • r++
  • l--
  • r--
  1. 填空(4) 应填 {{ select(4) }}
  • l++
  • p++
  • temp++
  • temp*=2
  1. 填空(5) 应填 {{ select(5) }}
  • ans+=temp
  • ans+=(p-l+1)*\temp
  • ans++
  • ans+=(p-l)*\temp

(2) 最大子序列和

给出一个整数数列(元素个数不超过 100 )包含正数、负数、和 0。请找出数列中的一个连续子序列,使得这个子序列包含的所有元素之和最大。在最大和的前提下还要求该子序列的元素个数最多。最后输出满足条件的子序列的和,及其元素个数。例如:{ 4、-5、3、2、4 } 数列中,满足条件的子序列为 {3、2、4},和为 9,元素个数为 3 。{1、2、3、-5、0、7、8}数列中,满足条件的子序列为 {11、2、3、-5、0、7、8 },和为 16,元素个数为 7。

#include<bits/stdc++.h>
using namespace std;

int a[110];
int n,ans,len,tmp,beg;

int main(){

	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	beg = 填空(1);
	for(int i=1;i<=n;i++){
		if(tmp+a[i]>ans){
			ans = tmp + a[i];
			len = i - beg;
		}
		else if( 填空(2) && i-beg>len) len=i-beg;

		if( tmp+a[i] 填空(3) ){
			beg = 填空(4);
			tmp=0;
		}
		else 填空(5);
	}
	cout<<ans<<" "<<len;
	return 0;

}
  1. 填空(1) 处应填 {{ select(6) }}
  • 0
  • 1
  • n
  • -1
  1. 填空(2) 处应填 {{ select(7) }}
  • tmp == ans
  • a[i]+tmp <= ans
  • a[i]+tmp == ans
  • tmp < ans
  1. 填空(3) 处应填 {{ select(8) }}
  • == 0
  • < ans
  • < 0
  • <=0
  1. 填空(4) 处应填 {{ select(9) }}
  • 1
  • i
  • n
  • 0
  1. 填空(5) 处应填 {{ select(10) }}
  • tmp=0
  • len++
  • beg=i
  • tmp += a[i]