c++小结(9月11号)

一切从昨晚的一个小题目开始:

总时间限制: 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()函数 

表示给输出值设置字符长度。

猜你喜欢

转载自blog.csdn.net/schuffel/article/details/82622850