【题目链接】
【题目考点】
1. 枚举
【解题思路】
记 a i a_i ai为数字序列中的第i个数
- 枚举对象:数列中的两个不同的数 a i , a j a_i, a_j ai,aj
- 枚举范围:整个数列
- 判断条件: a i = 2 a j a_i=2a_j ai=2aj或 a j = 2 a i a_j=2a_i aj=2ai
对满足条件的情况做计数。最后输出满足条件的情况数量。
也可以先对序列做升序排序,在 i < j i<j i<j的情况下只需要判断是否有 a j = 2 a i a_j=2a_i aj=2ai
【题解代码】
写法1:枚举
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[20], n = 0, ct = 0;
while(cin >> a[n])
n++;
for(int i = 0; i < n; ++i)
for(int j = i+1; j < n; ++j)
{
if(a[i] == a[j]*2 || a[j] == a[i]*2)
ct++;
}
cout << ct;
return 0;
}
写法2:先排序再枚举
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[20], n = 0, ct = 0;
while(cin >> a[n])
n++;
sort(a, a+n);
for(int i = 0; i < n; ++i)
for(int j = i+1; j < n; ++j)
{
if(a[j] == a[i]*2)
ct++;
}
cout << ct;
return 0;
}