【题目链接】
OpenJudge NOI 2.1 6184:找和为K的两个元素
【题目考点】
1. 枚举
【解题思路】
- 枚举对象:两个数
- 枚举范围:整个序列
- 判断条件:这两个数的和为k
枚举数组中的两个数的方法:
x从第1个数遍历到倒数第二个数,y从x的后一个数遍历到最后一个数,那么(x,y)就是枚举取出的一个数对。
对于下标从0开始到n-1的数组
- 第一个数下标i从0循环到n-2
- 第二个数下标j从i+1循环到n-1
对于下标从1开始到n的数组
- 第一个数下标i从1循环到n-1
- 第二个数下标j从i+1循环到n
【题解代码】
解法1:枚举
- 写法1:数组下标从0开始
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, k, a[1005];
cin >> n >> k;
for(int i = 0; i < n; ++i)
cin >> a[i];
for(int i = 0; i < n; ++i)
for(int j = i+1; j < n; ++j)
{
if(a[i]+a[j] == k)
{
cout << "yes";
return 0;
}
}
cout << "no";
return 0;
}
- 写法2:数组下标从1开始
#include <iostream>
using namespace std;
int main()
{
int n, k, a[1005];
cin >> n >> k;
for(int i = 1; i <= n; ++i)
cin >> a[i];
for(int i = 1; i <= n; ++i)
for(int j = i+1; j <= n; ++j)
{
if(a[i]+a[j] == k)
{
cout << "yes";
return 0;
}
}
cout << "no";
return 0;
}