高级光能
dev.c++样例过了 0分
#include<iostream> using namespace std; int main() { int a,b,bx,bx1,p=0; cin>>a; int a1[a+10],a2[a+10]; for(int i=0;i<a;i++) cin>>a1[i]; cin>>b; int b1[b]; for(int i=0;i<b;i++) { cin>>b1[i]; if(b1[i]==1) { cin>>bx; a2[p]=a1[bx-1]; p++; } else if(b1[i]==2) { cin>>bx>>bx1; a++; for(int i=a-1;i>=bx;i--) a1[i]=a1[i-1]; a1[bx-1]=bx1; } else if(b1[i]==3) { cin>>bx; for(int i=bx-1;i<a;i++) a1[i]=a1[i+1]; a1[a-1]=0; } } for(int i=0;i<p;i++) cout<<a2[i]<<endl; }
修练者
我看这个程序很难受,定义的变量太乱了。
有两点错比较重要 ,有两点可以改动
改动:
第一点:b1[i]是可以不用数组的。虽然输出时格式有点怪,但在评测时不会有问题。因此可以改成:
if(b1==1) {
cin>>bx;
cout<<a1[bx]<<endl;
}
第二点:由于你的输入是从 0 开始,到 a-1 结束 ,所以在将数字更新时会有许多奇怪的地方,如 a1[bx-1]=bx1; ,就不能从a1[bx]开始了。希望你输入时可以从 1 开始,到 a 结束,下面的改错也是要从 1 开始,到 a 结束的。
错误:
第一:
if(b1==2) {
cin>>bx>>bx1;
a++;
for(int i=a; i>bx; i--)
a1[i]=a1[i-1];
a1[bx]=bx1;
}
第二:
if(b1==3) {
cin>>bx;
a--;
for(int i=bx; i<=a; i++)
a1[i]=a1[i+1];
}
由于a1[bx]已经被a[bx+1]所覆盖,a1[a-1]=0;是干啥的?
综上所述,输入从1开始是重点,从 0 开始导致程序十分复杂,从而出错。
望采纳!
张元宝在2018-10-05 21:48:11追加了内容
高级光能
#include<iostream>
using namespace std;
int main()
{
int a,b,bx,bx1,p=0;
cin>>a;
int a1[a+20];
for(int i=1;i<=a;i++)
cin>>a1[i];
cin>>b;
int b1[b];
for(int i=1;i<=b;i++)
{
cin>>b1[i];
if(b1[i]==1)
{
cin>>bx;
cout<<a1[bx]<<endl;
}
else if(b1[i]==2)
{
cin>>bx>>bx1;
a++;
for(int i=a;i>bx;i--)
a1[i]=a1[i-1];
a1[bx]=bx1;
}
else if(b1[i]==3)
{
cin>>bx;
a--;
for(int i=bx;i<=a;i++)
a1[i]=a1[i+1];
}
}
}
测试点5
@张元宝