#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) 应填 {{ select(1) }}
- int l = 0
- int l = 1
- temp = 0
- temp = 1
- 填空(2) 应填 {{ select(2) }}
- a[r]-a[l] == c
- a[r]-a[l] < c
- a[r]-a[l] != c
- a[r]-a[l] <=c
- 填空(3) 应填{{ select(3) }}
- l++
- r++
- l--
- r--
- 填空(4) 应填 {{ select(4) }}
- l++
- p++
- temp++
- temp*=2
- 填空(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) 处应填 {{ select(6) }}
- 0
- 1
- n
- -1
- 填空(2) 处应填 {{ select(7) }}
- tmp == ans
- a[i]+tmp <= ans
- a[i]+tmp == ans
- tmp < ans
- 填空(3) 处应填 {{ select(8) }}
- == 0
- < ans
- < 0
- <=0
- 填空(4) 处应填 {{ select(9) }}
- 1
- i
- n
- 0
- 填空(5) 处应填 {{ select(10) }}
- tmp=0
- len++
- beg=i
- tmp += a[i]