问题标题: 酷町堂:1743

0
0
已解决
桑烁
桑烁
高级光能
高级光能

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;
} 

1
已采纳
张元宝
张元宝
修练者
修练者

我看这个程序很难受,定义的变量太乱了。

有两点错比较重要 ,有两点可以改动

改动:

第一点: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追加了内容

1
桑烁
桑烁
高级光能
高级光能

#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

@张元宝 

 

0
我要回答