注册 登录
编程论坛 C++教室

求各位帮帮忙。。运行有错~数组首尾依次交换

ccccmeiyi 发布于 2016-03-09 20:33, 3211 次点击
#include<iostream>
using namespace std;
int main()
{
    int a[100],i,j,temp,n;
    i=0;
    cin>>n;
    j=n-i-1;
    for(i=0;i<n;i++)
    { cin>>a[i];}
    for(i=0;i>=0,j<n;i++,j--)
    {
        if(i<=j)
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }
    for(i=0;i<n;i++)
    {
        cout<<a[i]<<endl;
    }
    return 0;
}
7 回复
#2
civilherui2016-03-09 20:48
#include<iostream>
using namespace std;
int main()
{
    int a[100],
        i,
        j,
        temp,
        n;  //数组大小
    i=0;
    cin>>n;
    j=n-i-1;   //j指向数组末尾
    for(i=0;i<n;i++)
    { cin>>a[i];}
    /*
        修改的这里:
            i>0 j<n 的条件,i从0开始往上长, j从n-1开始往下降,所以永远都不会停止
            陷入了死循环
            改成i<j就好了
    */
    for(i=0;i<j;i++,j--)            
    {
        //交换a[i]与 a[j]
        if(i<=j)
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }
    for(i=0;i<n;i++)
    {
        cout<<a[i]<<endl;
    }
    return 0;
}
#3
civilherui2016-03-09 20:50
#include<iostream>
using namespace std;
int main()
{
    int a[100],
        i,
        j,
        temp,
        n;  //数组大小
    i=0;
    cin>>n;
    j=n-i-1;   //j指向数组末尾
    for(i=0;i<n;i++)
    { cin>>a[i];}
    for(i=0;i>=0,j<n;i++,j--)            
    {
        //交换a[i]与 a[j]
        if(i<=j)
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
        /*
            突然发现,你是不是想修改这里
        */
        else break;
    }
    for(i=0;i<n;i++)
    {
        cout<<a[i]<<endl;
    }
    return 0;
}
#4
御坂2016-03-09 21:11
回复 楼主 ccccmeiyi
int main()
{
    const int count = 8;
    int test[count] = { 0 ,123,12,2,1251,2,213,12};
    int temp = 0;
    for (int i = 0; i < count/2; i++)
    {
        temp = test[i];
        test[i] = test[count - 1 - i];
        test[count - 1 - i] = temp;
        /*
                不用temp的写法
        test[i] += test[count - 1 - i];
        test[count - 1 - i] = test[i] - test[count - 1 - i];
        test[i] -= test[count - 1 - i];
                */
    }
    for (int i = 0; i < count; i++)cout << test[i] << endl;
}
#5
ccccmeiyi2016-03-09 21:25
回复 2楼 civilherui
谢谢啦   我总是陷入死循环。请教下这个程序算法复杂度是多少啦?
#6
ccccmeiyi2016-03-09 21:28
回复 3楼 civilherui
嗯。。非常感谢
#7
civilherui2016-03-09 22:21
回复 5楼 ccccmeiyi
o(n),都没有双层循环的
#8
rjsp2016-03-10 09:26
算法错误别人已经指出来了,我说一下更重要的“代码规范”

程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    // 获得数组长度
    size_t n;
    cin >> n;
    if( !cin || n>100 )
        return 1;

    // 获得数组内容
    int a[100];
    for( size_t i=0; i!=n; ++i )
        cin >> a[i];

    // 反序
    for( size_t i=0; i!=n/2; ++i )
    {
        int temp = a[i];
        a[i] = a[n-i-1];
        a[n-i-1] = temp;
    }

    // 输出
    for( size_t i=0; i!=n; ++i )
        cout << a[i] << '\n';
    cout << flush;

    return 0;
}

1