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;
}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐