【问题标题】:How to find the values being swapped in two different arrays?如何找到在两个不同数组中交换的值?
【发布时间】:2015-09-19 15:51:10
【问题描述】:

我想用一个数组中的赔率和另一个数组中的偶数交换一个数组,同时跟踪计数和被交换的值。

{2, 3, 6}
{1, 4, 7}

will become

{1, 3, 7}
{2, 4, 6}

有 2 次交换,交换的值是 1 &2, 6 & 7.

int main() {
    int a1[3] = { 2, 3, 6 };
    int a2[3] = { 1, 4, 7 };
    int i;
    int swapcount = 0;
    int swapvalue;

    std::cout << "Before swap:\n" << endl;
    std::cout << "Array 1:\n" << endl;
    for (int i = 0; i < 3; i++) {
        cout << " " << a1[i] << endl;

    }
    std::cout << "Array 2:\n" << endl;
    for (int i = 0; i < 3; i++) {
        std::cout << " " << a2[i] << endl;

    }

    for (int i = 0; i < 3; i++) {
        if (a1[i] % 2 != 1) {
            swapcount++;
            int temp = a1[i];
            a1[i] = a2[i];
            a2[i] = temp;
            swapvalue = i;
        }
    }

    std::cout << "After swap:\n" << endl;
    std::cout << "Array 1:\n" << endl;
    for (int i = 0; i < 3; i++) {
        std::cout << " " << a1[i] << endl;
    }

    std::cout << "Array 2:\n" << endl;
    for (int i = 0; i < 3; i++) {
        std::cout << " " << a2[i] << endl;

    }

    std::cout << "swap count: " << swapcount << endl;
    std::cout << "swap value: " << swapvalue << endl;
}

到目前为止,我已经让 swapcounter 工作,但我似乎无法弄清楚:

如何查找和存储被交换元素的各个值? (我只能显示一个值。)

我能得到任何关于如何获取值的提示吗?除了输入和输出流之外,我不允许使用任何其他库。提前谢谢。

【问题讨论】:

    标签: c++ arrays swap


    【解决方案1】:

    创建一个辅助数组swapbool,如果交换完成则设置boolean = 1。

    #include<iostream>
    using namespace std;
    int main() {
        int a1[3] = { 2, 3, 6 };
        int a2[3] = { 1, 4, 7 };
        int swapbool[3] = {0,0,0};
        int i;
        int swapcount = 0;
        int swapvalue;
    
        std::cout << "Before swap:\n" << endl;
        std::cout << "Array 1:\n" << endl;
        for (int i = 0; i < 3; i++) {
            cout << " " << a1[i] << endl;
    
        }
        std::cout << "Array 2:\n" << endl;
        for (int i = 0; i < 3; i++) {
            std::cout << " " << a2[i] << endl;
    
        }
    
        for (int i = 0; i < 3; i++) {
            if (a1[i] % 2 != 1) {
                swapcount++;
                int temp = a1[i];
                a1[i] = a2[i];
                a2[i] = temp;
               // swapvalue = i;
                swapbool[i]=1;
            }
        }
    
        std::cout << "After swap:\n" << endl;
        std::cout << "Array 1:\n" << endl;
        for (int i = 0; i < 3; i++) {
            std::cout << " " << a1[i] << endl;
        }
    
        std::cout << "Array 2:\n" << endl;
        for (int i = 0; i < 3; i++) {
            std::cout << " " << a2[i] << endl;
    
        }
    
        std::cout << "swap count: " << swapcount << endl;
        for (int i = 0; i < 3; i++) {
            if(swapbool[i] == 1)
            {
                std::cout << "swapvalue1-> " << a2[i] << endl;
                std::cout << "swapvalue2-> " << a1[i] << endl;
            }
        }
    
        //std::cout << "swap value: " << swapvalue << endl;
    }
    

    【讨论】:

    • 欢迎 :)。我不确定这是否节省空间,因为我们正在创建一个全新的数组来完成这项工作,可能会有更好的空间效率方式来做,例如,创建一个整数 - 我们有 4 个字节 - 32 位,所以我们可以处理一个大小为 32 的数组。如果我们可以将这个整数中的位设置为与数组的索引相对应,那么我们就节省了很多空间。
    【解决方案2】:

    有很多方法可以做到这一点。最简单的解决方案是将它们存储在std::vectorstd::pair 中:

    std::vector<std::pair<int, int>> swapvalues;
    

    然后插入:

    swapvalues.emplace_back(val1, val2);
    

    顺便说一句,在您的代码中,您存储的是索引,而不是值。如果要存储索引,请仅使用 std::vector 的整数。

    【讨论】:

    • 您好,我们不允许使用任何其他库。我很欣赏这些提示,并将牢记这一点。抱歉,我对此很陌生。
    【解决方案3】:

    如何找到被交换元素的单个值?

    当你交换元素时存储它们的索引:

     int swappedValuesIndex[];
    
     for (int i = 0; i < 3; i++) {
        if (a1[i] % 2 != 1) {
            // store swapped values' index  
            swappedValuesIndex[swapcount] = i;
    
            swapcount++;
    
            int temp = a1[i];
            a1[i] = a2[i];
            a2[i] = temp;
            swapvalue = i;
        }
     } 
    
     // print swapped values
     for (int i = 0; i < swapcount; i++){
         cout <<"a1["<< swappedValuesIndex[i] <<"]"<< a1[swappedValuesIndex[i]] <<'\n';
         cout <<"a2["<< swappedValuesIndex[i] <<"]"<< a2[swappedValuesIndex[i]] <<'\n';
     }
    

    【讨论】:

    • 我认为与此类似,但我想需要跟踪。因此,一种替代方法是存储在向量中。另一种选择是存储在数组本身中,与原始数组占用相同的空间,我将发布代码。
    • 您是要存储它们还是只是想看看哪些是值?
    • 抱歉造成误会,我想先保存这些值,等交换完成后再取回。
    • 嗨,我在下面发布一个答案,请检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多