该博客探讨了如何解决计算机编程问题,即给定一个长度为n的序列a和两个整数b、c,计算序列中满足条件|a_i - a_j| mod b = c的数对(i, j)的数量。博主提供了两种不同的C++实现方法,一种通过双重循环计算,另一种优化了数组遍历。"
124013199,8752290,Apache ShardingSphere + openGauss:16台服务器达成1000万tpmC,"['数据库', '分布式', 'Java', '大数据', '运维']
若干组数据
(大概5每组数据第一行三个整数n(1 \leq n \leq 100), b, c (0 \leq c < b \leq 10^{9})n(1≤n≤100),b,c(0≤c<b≤109)。
接下来一行nn个整数a_i ( 0 \leq a_i \leq 10^{9})ai(0≤ai≤109)。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,i,j,y,x,k,a[100];
long b,c;
while(cin>>n>>b>>c)
{
k=0;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
for(j=n;j>0;j--){
for(i=1;i<j;i++) {
x=a[i]-a[j];
y=abs(x);
if(y%b==c)
k++;
}
}
cout<<k<<endl;
}
return 0;
}
注意排列数组
另一种方法:
#include <iostream>
using namespace std;
int main()
{
int n , b , c,a[100],i,j,s;
while(cin>>n>>b>>c)
{
for(i=1;i<=n;i++)
cin>>a[i];
int s =0;
for(i=1;i<=n;i++) for( j=i+1;j<=n;j++) if(abs(a[i]-a[j])%b==c)
s++;
cout<<s<<endl;
}
return 0;
}