问题描述:
有一段数字一共有n个(n<=200),编一程序交换这组数中任意指定的两段。
输入描述:
一个数N(不超过200个)
一行N个数由空格分开
两个空格分开的数(表示要交换的其中一段)xy
两个空格分开的数(表示要交换的其中另一段)bc
输入的两段数据保证长度是一样的,并且数据保证输入的前一个数小于等于后一个数
输出描述:
交换后的一行数(中间用空格隔开)
输入样例:
16
3 6 11 45 23 70 67 34 26 89 90 15 56 50 20 10
3 5
13 15
输出样例:
3 6 56 50 20 70 67 34 26 89 90 15 11 45 23 10
这道题目对比别的题目并不难,难点只是要搞清楚输出的数。
交换的是数组中任意的两段,那么就可以输出第一段代码,1---x-1中不需要交换的元素(起始元素)
for (int i=1;i<=x-1;i++)
cout<<a[i]<<" ";
之后呢,就可以输出第一段交换的元素了,也就是a[b]----a[c](注意:不是a[x]---a[y]),那么代码如下:
for (int i=b;i<=c;i++)
cout<<a[i]<<" ";
之后,输出数组中间大段不用交换的原始元素,就是交换元素中间的部分,那么代码就是:
for (int i=y+1;i<=b-1;i++)
cout<<a[i]<<" ";
接着,输出第二段数组中交换的元素,这下是开头的a[x]---a[y]
for (int i=x;i<=y;i++)
cout<<a[i]<<" ";
最后,输出最后不用交换的元素即可:
for (int i=c+1;i<=n;i++)
cout<<a[i]<<" ";
好了,整体代码就是这样,再加上一个头文件,一个输入数组以及一个输出数组就可以了。感谢大家!