#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; int a[n],c[n*n]={0},t=0; for(int i=0;i<n;i++) { cin>>a[i]; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(j==i) j++; c[a[i]-a[j]]++; } } for(int j=0;j<n*n;j++) { if(c[j]!=0) t++; cout<<c[j]<<endl; } return 0; }改错
时间: 2024-03-03 22:49:06 浏览: 54
这段代码存在一些问题:
1. 声明 `int c[n*n]={0}` 的数组大小可能会过大,导致栈溢出,可以使用动态分配内存的方式避免这个问题。
2. 在第二个循环中,当 `j==i` 时会多计算一次,应该将 `if(j==i) j++;` 改为 `if(j==i) continue;`。
3. 最后一个循环中,应该只输出非零元素的个数,而不是所有元素,应该将 `cout<<c[j]<<endl;` 改为 `if(c[j]!=0) t++;`。
修改后的代码如下:
```
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
int *a=new int[n];
int *c=new int[n*n];
memset(c,0,sizeof(int)*n*n);
int t=0;
for(int i=0;i<n;i++) {
cin>>a[i];
}
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if(j==i) continue;
c[a[i]-a[j]]++;
}
}
for(int j=0;j<n*n;j++) {
if(c[j]!=0) t++;
}
cout<<t<<endl;
delete[] a;
delete[] c;
return 0;
}
```
阅读全文