POJ 2807 两倍

时间限制: 
1000ms
内存限制: 
65536kB
描述
给定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 02 4 8 10 07 5 11 13 1 3 0-1
样例输出
320
 
(1)、源代码:
#include <iostream>

using namespace std;

int main()
{
     double num[20];
     int i, j, len, t;    
     int count;
     while(1)
     {
          count = 0;
          cin >> num[0];
          if(num[0] < 0)
               break;
          else
               for(i = 1; ; i++){
                    cin >> num[i];
                    if(num[i] == 0){
                         len = i;
                         goto flag;
                    }
               }
flag:;
          for(i = 0; i < len; i++)
          {
               t = num[i];
               for(j = i; j > 0 && num[j-1] > t; j--)
                    num[j] = num[j-1];
               num[j] = t;
          }
          for(i = 0; i < len-1; i++)
          {
               for(j = i+1; j < len; j++)
               {
                    if(num[j] / num[i] == 2)
                         count++;
               }
          }
          cout << count << endl;
     }
    
     return 0;
}

(2)、解题思路:读入一组数据,将它们进行排序,然后找出有多少数满足条件。
(3)、出错原因:在计算count时,应将count放入循环里,每计算一组数据之前将count赋0。
 
 
 
 
 
 
posted on 2012-05-02 21:56  谷堆旁边  阅读(1506)  评论(0编辑  收藏  举报