在另一个c ++之前做一些事

时间:2015-03-23 07:43:00

标签: c++

我应该编写一个读取n个变量的程序,范围从1到n。这里的变量代表赛车的起始组(ex 4 3 1 2),最终组总是1,2,3,4,..... n。 我被要求显示过度通过的最小数量(此处为5)然后显示过度通道的详细信息(此处为3 1然后为4 1然后为3 2然后为4 2然后为4 3)我写了一个c ++代码但我没有找到如何在超越之前显示(s)而无需将过度通道存储在一个占用超过16000 kb内存的数组中 这是我的代码

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cctype>

using namespace std ;

int main()
{
int a;
cin>>a;
int t[a];
int t1[2002];
for (int i(0); i<a; i++)
    {cin>>t[i];t1[i]=t[i];}
int s=0;int it(0);
for (int i(1); i<=a; i++)
{
    int pos;
    int c=1;
    for (int j(0); j<a && c==1; j++)
    {
        if (t[j]==i)
        {
            pos=j;
            c=0;
        }
    }
    for (int j(1);j<=pos-i+1;j++)
    {
        int aux=t[pos-j];
        t1[it]=t[pos-j];
        t1[it+1]=t[pos-j+1];
        t[pos-j]=i;
        t[pos-j+1]=aux;
        s++;
        it+=2;
    }
}
cout<<s<<endl;
for (int i(0);i<it;i+=2)
{
    cout<<t1[i]<<" "<<t1[i+1]<<endl;
}



return 0;
}

2 个答案:

答案 0 :(得分:0)

如果你不想使用更多的内存,你可以使用更多的CPU时间(扫描数组两次,第一次计算天桥次数,第二次打印它们),或者使用更多硬盘空间(创建一个临时文件来保存天桥,在屏幕上打印文件内容,最后删除它)。

答案 1 :(得分:0)

您的任务说明对于冒泡排序的实现感到尖叫。

至于显示交换次数(对应于超车)和交换本身: 在执行qlgorithm时,只需对交换进行计数,并在执行时立即显示每个交换。