原POJ 2807 两倍

描述

给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。

比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。

 

输入

输入包括多组测试数据。每组数据包括一行,给出2到15个两两不同且小于100的正整数。每一行最后一个数是0,表示这一行的结束后,这个数不属于那2到15个给定的正整数。输入的最后一行只包括一个整数-1,这行表示输入数据的结束,不用进行处理。

 

输出

对每组输入数据,输出一行,给出有多少个数对满足其中一个数是另一个数的两倍。

 

样例输入

1 4 3 2 9 7 18 22 0
2 4 8 10 0
7 5 11 13 1 3 0
-1

样例输出

3
2
0
 1 #include<iostream>

 2 #include<algorithm>

 3 using namespace std;

 4 

 5 int main() {

 6     int num[15], doub;//doub计数

 7     while(cin >> num[0]) {

 8         doub=0;

 9         if(num[0] == -1) break;

10         int i;

11         for(i=1; i<15; i++) {

12             cin >> num[i];

13             if(num[i] == 0) break;

14         }

15         sort(num,num+i);

16         for(int j=1; j<i; j++) {

17             for(int k=0; k<j; k++) {

18                 if(num[j]/num[k]==2&&num[j]%num[k]==0)

19                     doub++;

20             }

21         }

22         cout << doub <<"\n";

23     }

24     return 0;

25 }

好水的题,但是不用sort的话 好像也一样可以。

你可能感兴趣的:(poj)