题目描述
某银行需要统计日交易量,每存进一笔或取出一笔算做一次交易,日交易量为存入和取出金额的绝对值之和。存入用正值表示,取出用负值表示。请你帮忙编程实现。
输入
第一行包含一个非负整数k,表示被交易的笔数。其后一行包含k个整数,表示每笔交易的金额。
输出
输出其日交易量。
样例输入
4
3
0
-4
-5
样例输出
12
思路:这题比较简单,设置一个sum用来计算支出跟收入就OK了。
#include<iostream>
using namespace std;int main()
{
int k,sum=0;
int a;
cin>>k;
for(inti=0;i<k;i++)
{
cin>>a;
if(a>0)
sum= sum + a;
else
sum= sum - a;
}
cout<<sum;
}
2.题目描述
我有很多(n条)珍珠项链,每天我都要从中挑一条戴上……挑哪条很有讲究,不能太难看也不能太好看。所以我希望你能帮帮我,解决这个问题――每天帮我算算,那天我能戴的项链有多少条。
输入
第1行为正整数n,表示项链的总条数(n≤100000);
第2行有n个整数(代表每条项链晶的好看程度Xi,0≤Xi≤maxlongint);
第3行为正整数m,表示总天数(也就是总询问次数,其中m≤100000);
以下m行,每行两个整数Ai,Bi(1≤Ai,Bi≤maxlongint),询问好看程度在Ai到Bi之间的项链条数(含等于Ai或Bi的,Ai与Bi大小关系不确定)。
输出
输出m行,对于每次询问输出一行,从Ai到Bi(含Ai,Bi)好看程度在Ai到Bi之间的项链条数。
样例输入
7
8 2 3 5 6 7 7
6
1 5
8 6
1 10
5 5
4 4
7 8
样例输出
3
4
7
1
0
3
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
int n,a1,b,b1;
long long a[1000010];
int find(int a1)
{
int low=0,high=n+1;
while(low+1<high)
{
int mid=(low+high)/2;
if(a[mid]<a1)low=mid;
else high=mid;
}
return low;
}
int find2(int a1)
{
int low=0,high=n+1;
while(low+1<high)
{
int mid=(low+high)/2;
if(a[mid]<=a1)low=mid;
else high=mid;
}
return low;
}
int main()
{
scanf("%d",&n);
for(inti=1; i<=n; i++) scanf("%d",&a[i]);
sort(a+1,a+1+n);
a[0]=-1;
a[n+1]=1000001;
scanf("%d",&b);
for(inti=1;i<=b;i++)
{
scanf("%d",&a1);
scanf("%d",&b1);
if(b1<a1)swap(b1,a1);
cout<<find2(b1)-find(a1)<<endl;
}
return0;
}