Bailian2807 兩倍【序列】
阿新 • • 發佈:2018-11-19
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; }