1. 程式人生 > >Bailian2807 兩倍【序列】

Bailian2807 兩倍【序列】

2807:兩倍
描述
給定2到15個不同的正整數,你的任務是計算這些數裡面有多少個數對滿足:數對中一個數是另一個數的兩倍。

比如給定1 4 3 2 9 7 18 22,得到的答案是3,因為2是1的兩倍,4是2個兩倍,18是9的兩倍。

輸入
一行,給出2到15個兩兩不同且小於100的正整數。最後用0表示輸入結束。
輸出
一個整數,即有多少個數對滿足其中一個數是另一個數的兩倍。
樣例輸入
1 4 3 2 9 7 18 22 0
樣例輸出
3
來源
翻譯自Mid-Central USA 2003的試題

問題連結Bailian2807 兩倍
問題描述:(略)
問題分析
    這個問題與參考連結的題是同一題,只是翻譯了一下。解題思路是給出現的數做個標記,然後判定它(需要考慮奇數還是偶數)的一半或2倍的數是否存在,做個計數就可以了。
程式說明

:(略)
參考連結POJ1552 HDU1303 UVALive2787 ZOJ1760 Doubles【序列】
題記
    題做多了難免遇到相同的題。

AC的C語言程式如下:

/* POJ1552 HDU1303 UVALive2782 ZOJ1760 Doubles */

#include <stdio.h>
#include <string.h>

#define TRUE 1
#define FALSE 0
#define MAXN 99
int flag[MAXN * 2 + 1];

int main(void)
{
    int a, count;

    while(~scanf("%d", &a) && a != -1) {
        memset(flag, 0, sizeof(flag));

        count = 0;
        while(a) {
            if(flag[a * 2])
                count++;
            if((a & 1) == 0 && flag[a / 2])
                count++;

            flag[a] = TRUE;

            scanf("%d", &a);
        }

        printf("%d\n", count);
    }

    return 0;
}