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)、解题思路:读入一组数据,将它们进行排序,然后找出有多少数满足条件。
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。