2020-01-06
ACM题目给定2到10,000个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。使用桶排法C```#include <iostream>#include <bits/stdc++.h>#include <algo...
·
ACM题目
给n个数,判断他们的倍数,谁是谁的两倍关系。
给定2到10,000个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。
输出为二倍数的个数k
使用桶排法C
```#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
int a[100100];
int b[2000100];
int n,j,k,x;
int main()
{
ios::sync_with_stdio(false);
cin>>n;
while(n--)
{
j=1;
memset(b,0,sizeof(b));//初始化0
while(cin>>x&&x)//输入并桶排,防止超时
b[x*2]=1,a[j++]=x;
k=0;
for(int i=1; i<=j-1; i++)//判断是否为1
{
if(b[a[i]])
k++;
}
printf("%d\n",k);
}
return 0;
}
更多推荐



所有评论(0)