一切从昨晚的一个小题目开始:
总时间限制: 1000ms 内存限制: 65536kB
描述:在一个长度为n(n < 1000)的整数序列中,判断是否存在某两个元素之和为k。
输入
第一行输入序列的长度n和k,用空格分开。
第二行输入序列中的n个整数,用空格分开。
输出
如果存在某两个元素的和为k,则输出yes,否则输出no。
样例输入
9 10
1 2 3 4 5 6 7 8 9
样例输出
yes
一开始写本题的时候,我采取的是两个for循环,meet条件就结束循环,返回结束。
源代码如下:
#include <iostream>
using namespace std;
int main(){
int n,k;
int a[1000];
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(k == (a[i] + a[j])){
cout << "yes" << endl;
return 0;
}
}
}
}
本地运行成功,但是提交到OpenJudge 却失败了,可能是不满足结构化语言吧!
所以在我搜索了几篇资料后,采取了如下解决方法:
加入外部变量,以及判断,
#include <iostream>
using namespace std;
int main() {
int n, k;
int a[1000];
bool b = false;
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 (k == (a[i] + a[j])) {
cout << "yes" << endl;
b = true;
break;
}
}
if (b)
break;
}
if (!b)
cout << "no" << endl;
return 0;
}
然后编译就通过了
原因我认为第一种不满足程序语言结构性,所以被视为错误结果,此外还可以用goto,当然仅限于本地测试,网上不通过。
第三。关于数组的知识,
我们知道在C++ 语言中,是不支持可变数组的。
但是如果出现我们不确定数组长度,想修改怎么办。
老师在课堂上给出了两种解决方法,
1:采取预定义的模式 #define N 4
2:利用const 如 const int i =8 ; a[i] ;
这两种方法都可以很方便的在后期修改变量。
数组的存储知识:一维数组线性存储,二维数组,看作几个一维数组,三维数组同理,
#include<iomanip>
setw()函数
表示给输出值设置字符长度。