题目描述
有n个数组成一组,现在要交换这组数中任意指定的两段。(两段不重合,且这两段的数字个数一样)
输入格式
共四行
第一行 一个整数n 第二行 一行n个数,数与数之间空格隔开 第三行 空格隔开的两个数(表示要交换的其中一段起始和终止位置) 第四行 空格隔开的两个数(表示要交换的另一段起始和终止位置)
输出格式
一行 交换后的n个数,数与数之间空格隔开
运行结果:
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;
}
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |