OpenJudge NOI 2.1 1809:两倍
OpenJudge NOI 2.1 1809:两倍记aia_iai为数字序列中的第i个数对满足条件的情况做计数。最后输出满足条件的情况数量。也可以先对序列做升序排序,在i
·
【题目链接】
【题目考点】
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, t, cnt = 0;
while(cin >> t)
a[++n] = t;
for(int i = 1; i < n; ++i)
for(int j = i+1; j <= n; ++j)
if(a[i] == a[j]*2 || a[j] == a[i]*2)
cnt++;
cout << cnt;
return 0;
}
写法2:先排序再枚举
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[20], n = 0, t, cnt = 0;
while(cin >> t)
a[++n] = t;
sort(a+1, a+1+n);
for(int i = 1; i < n; ++i)
for(int j = i+1; j <= n; ++j)
if(a[j] == a[i]*2)
cnt++;
cout << cnt;
return 0;
}
更多推荐



所有评论(0)