这个C++程序哪里错了啊

来源:百度知道 编辑:UC知道 时间:2024/05/28 12:50:28
就是编译错啊!
#include<iostream>
using namespace std;

int a[20][20][20];
int main(){

a[0][0][0]=1;
a[1][0][0]=1;
a[0][1][0]=1;
a[0][0][1]=1;
a[1][1][0]=1;
a[1][0][1]=1;
a[0][1][1]=1;
for(int i=1;i<=20;++i)
for (int j=1;j<=20;++j)
for (int k=1;k<=20;++k)
{
if(i<j&&j<k)
a[i][j][k]=a[i][j][k-1]+a[i][j-1][k-1]-a[i][j-1][k];
else
a[i][j][k]=a[i-1][j][k]+a[i-1][j-1][k]+a[i-1][j][k-1]-a[i-1][j-1][k-1];
}
for (int a,b,c;cin>>a>>b>>c&&(a+1||b+1||c+1);)
{
if(a<=0||b<=0||c<=0)
cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<1<<endl;
else if(a>20||b>20||c>20)

首先告诉你,你定义的三维数组在循环遍历中越界了。int a[20][20][20]; 记住,数组的下标是相对于数组首地址的偏移量,也就是说,比如一维数组 int b[10];的上界和下界分别应该是b[0]和b[9],而非b[1]和b[10];
其次,在循环for (int a,b,c;cin>>a>>b>>c&&(a+1||b+1||c+1);)中,你定义的int a;覆盖了你定义的全局符号,也就是三维数组a,以致于在循环内部引用的语句cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<a[20][20][20]<<endl;中引用的a不是那个三维数组,而是你定义的变量a。明白了吗?你只需要在这一句和下一句的a 前加上::就好了。

int a[20][20][20]; 这句要拿进main()里面执行吧。

int a[20][20][20];
都是0-19元素
而你循环里有20,出界了
for(int i=1;i<=20;++i)
for (int j=1;j<=20;++j)
for (int k=1;k<=20;++k)

貌似不是这么简单吧 我运行了
for (int a,b,c;cin>>a>>b>>c&&(a+1||b+1||c+1);)
这句也对???

疑问

for(int i=1;i<=20;++i)
for (int j=1;j<=20;++j)
for (int k=1;k<=20;++k)
数组越界