数字交换(C语言、C++)

题目描述
有n个数组成一组,现在要交换这组数中任意指定的两段。(两段不重合,且这两段的数字个数一样)

输入格式
共四行

第一行 一个整数n 第二行 一行n个数,数与数之间空格隔开 第三行 空格隔开的两个数(表示要交换的其中一段起始和终止位置) 第四行 空格隔开的两个数(表示要交换的另一段起始和终止位置)

输出格式
一行 交换后的n个数,数与数之间空格隔开

img

运行结果:

img

C代码:

#include<stdio.h>
int main(void)
{
    int a[100001], n, i, j;
    int s1, t1, s2, t2; //记录两个区间
    int tmp;//临时变量
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    //读取区间1
    scanf("%d %d", &s1, &t1);
    //读取区间2
    scanf("%d %d", &s2, &t2);
    for (i = s1,j=s2; i <= t1; i++,j++)
    {
        tmp = a[i-1];
        a[i - 1] = a[j - 1];
        a[j - 1] = tmp;
    }
    //输出
    for (i = 0; i < n; i++)
    {
        if (i < n - 1)
            printf("%d ", a[i]);
        else
            printf("%d", a[i]);
    }

    return 0;
}

C++代码:

#include <iostream>
using namespace std;
int main(void)
{
    int a[100001], n, i, j;
    int s1, t1, s2, t2; //记录两个区间
    int tmp;//临时变量
    cin >> n;
    for (i = 0; i < n; i++)
        cin >> a[i];
    //读取区间1
    cin >> s1 >> t1;
    
    //读取区间2
    cin >> s2 >> t2;
    for (i = s1,j=s2; i <= t1; i++,j++)
    {
        tmp = a[i-1];
        a[i - 1] = a[j - 1];
        a[j - 1] = tmp;
    }
    //输出
    for (i = 0; i < n; i++)
    {
        if (i < n - 1)
            cout << a[i] << " ";
        else
            cout << a[i];
    }

    return 0;
}

既然交换的长度一样,那就来个for循环,对应位置进行交换就行

#include <stdio.h>
int main()
{
    int n,a[100001] = {0};
    int m,n,p,q,i,d,t;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d%d%d%d",&m,&n,&p,&q);
    d = n-m;
    for(i=0;i<=d;i++)
    {
        t = a[n+i];
        a[n+i] = a[p+i];
        a[[p+i] = t;
    }
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
}

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++)
        cin >> nums[i];
    int l1, r1, l2, r2;
    cin >> l1 >> r1 >> l2 >> r2;
    // 交换两段
    vector<int> tmp(r1 - l1 + 1);
    for (int i = l1; i <= r1; i++)
        tmp[i - l1] = nums[i];
    for (int i = l2; i <= r2; i++)
        nums[l1 + i - l2] = nums[i];
    for (int i = 0; i < r1 - l1 + 1; i++)
        nums[l2 + i] = tmp[i];
    // 输出结果
    for (int i = 0; i < n; i++)
        cout << nums[i] << " ";
    return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n, s1, e1, s2, e2;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }
    cin >> s1 >> e1 >> s2 >> e2;

    vector<int> tmp1(nums.begin() + s1 - 1, nums.begin() + e1);
    vector<int> tmp2(nums.begin() + s2 - 1, nums.begin() + e2);
    swap_ranges(tmp1.begin(), tmp1.end(), tmp2.begin());

    for (int i = 0; i < n; i++) {
        cout << nums[i] << " ";
    }
    cout << endl;

    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632