【发布时间】:2019-04-07 22:29:09
【问题描述】:
我有一个最大行数为 5 的帕斯卡三角形。假设我想找到第四行的积分。如何访问帕斯卡三角形中的第四行。 More precisely I want to know how to access a row in the pascal's triangle by entering the number n of the row
代码
#include <iostream>
using namespace std;
int main(){
int a1, a2, a3, a4, a5, pascal, columns;
const int rows = 5;
int **array = new int *[rows]; //generating array
for(int i = 0; i <= rows; i++)
array[i] = new int [columns];
for (int i = 0; i <= rows; i++){ //loop for te pascal's triangle
for (int j = 0; j <= i; j++){
if(j == 0 || i == 0){
pascal = 1; //first element of pascal's triangle
}
else{
pascal = pascal *(i - j + 1) / j; //pascal's triangle formula
}
cout << " " << pascal; // printing pascals triangle
}
cout << "\n";
}
cout << "enter which row to integrate: ";
// here I want to directly access a row rather that entering the elements of the row
cin >> a1;
cin >> a2;
cin >> a3;
cin >> a4;
cin >> a5;
}
1
1 1
1 2 1
1 3 3 1 ------> 喜欢n = 4 我想整合这一行的元素
1 4 6 4 1
答案应该是
for 1,3,3,1 = 0, 1, 1.5, 1, 0.25
【问题讨论】:
-
columns未初始化,它的值可以是任何值。而for(int i = 0; i <= rows; i++)是越界访问。array[rows-1]是最大的可访问元素。 -
它有什么改变吗?
-
是的。您的数组中有多少列? 0 或 -10 列好吗?将
columns用作数组长度时的值可以是anything。在最好的情况下,越界访问数组将读取下一条数据(例如,array[3][5]可以读取array[4][0]处的值)。在最坏的情况下,您将拥有nasal demons -
由于@Yksisarvinen 指出的错误,该程序具有未定义的行为。首要任务应该是摆脱任何 UB。只要程序有 UB,就不可能推断它的行为,因为它没有定义的行为。
标签: c++ arrays c++11 visual-c++ multidimensional-array