我是c ++语言的新手。我正在尝试使用函数解决问题。我必须打印五角形数字,直到输入整数,但是当函数返回值时,它只打印一个值。我希望对此有所帮助。
#include<iostream>
using namespace std;
int pent(int num){
int p;
for(int i=1;i<=num;i++){
p=(i*(3*i-1)/2);
}
return p;
}
int main(){
int num;
cin>>num;
int sender=pent(num);
cout<<sender<<endl;
return 0;
}
答案 0 :(得分:2)
您的函数返回int
,它是一个整数。要返回更多,可以使用std::vector
。您可能不熟悉它,所以我会给您一些提示...
最简单的构造函数创建一个没有条目的向量:
std::vector<int> x;
您可以通过reserve
为元素保留空间:
x.reserve(num);
向量仍然没有元素,但是它已经分配了足够的空间来容纳num
个元素。这很重要,因为当我们添加元素时,向量将增长,并且可能需要将所有元素复制到内存中的其他位置。我们可以通过预先预留足够的空间来避免这种频繁的重新分配。
要向向量添加元素,可以使用push_back
:
x.push_back(42);
最终要打印矢量的所有元素,我们可以使用range-based for loop:
for (auto element : x) std::cout << element << " ";
因此您可以像这样重写代码:
#include <iostream>
#include <vector>
std::vector<int> pent(int num){
std::vector<int> result;
result.reserve(num);
for(int i=1;i<=num;i++){
result.push_back(i*(3*i-1)/2);
}
return result;
}
int main(){
int num;
std::cin >> num;
auto sender = pent(num);
for (auto number : sender) std::cout << number << " ";
}
答案 1 :(得分:0)
在您的程序中,从pent()函数中,您仅返回最后的计算值。在过去,您将覆盖变量p。
因此,@ asmmo建议采用一种方法在pent()函数中进行打印。 或者,您可以将向量传递给pent()函数并在其中存储值,然后将其打印在main函数中。
供您参考:
void pent(int num, vector<int> &arr) {
int p;
for (int i = 1; i <= num; i++) {
arr[i-1] = (i*(3 * i - 1) / 2);
}
}
int main() {
int num;
cin >> num;
vector<int> arr(num);
pent(num, arr);
for (int i = 0; i < num; i++) {
cout << arr[i] << endl;
}
return 0;
}