问题 D: 按给出的指定位置排序
时间限制: 1 Sec 内存限制: 1000 MB
提交: 577 解决: 127
状态
题目描述
设有一数列,包含10个数,已按升序排好。现要求编一程序,它能够把从指定位置m开始的n个数按逆序重新排列并输出新的完整数列。
输入
输入:
0 1 2 3 4 5 6 7 8 9
m :4
n : 6
输出
输出:
0 1 2 3 9 8 7 6 5 4
样例输入
0 1 2 3 4 5 6 7 8 9
m:4
n:6
样例输出
0 1 2 3 9 8 7 6 5 4
提示
提交
请把你的代码贴出来一下。
#include<iostream>
using namespace std;
int main() {
int array[10];
cout << "请输入数组值:" << endl;
int i = 0;
while (i<10)
{
cin >> array[i];
i++;
}
cout << "数组值输入完毕,如下:" << endl;
for (int i = 0; i < 10; i++) {
cout << array[i] << " ";
}
cout << endl <<"请指定交换顺序的起始位置:" << endl;
int start;
cin >> start;
cout << "请输入需要交换的长度:" << endl;
int length;
cin >> length;
if (start + length > 9) {
length = 9;
}
for (; start < length; start++&&length--) {
int temp = array[start];
array[start] = array[length];
array[length] = temp;
}
cout << "交换后的数组为:" << endl;
for (int i = 0; i < 10; i++) {
cout << array[i] << " ";
}
cout << endl;
system("pause");
}
你如果是使用C语言的话,在上边代码的基础上改一改头文件和输入输出代码就可以了。
使用一个qsort然后写一个相反的compare函数不就可以了吗?
运行错误是指?程序出错,还是oj提交返回WA?
直接使用sort函数,重载cmp比较符号,即可实现,sort是c++stl里的一个库函数,楼主可以自己百度学习下,这些简单的库函数是ACM比赛中常用的,
作为新手入门也可以去借鉴学习,所用到的头文件是
以下为AC代码:
#include
#include
#include
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int n,m;
int a[15];
void solve(){
sort(a+m,a+m+n,cmp);
}
int main(){
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
scanf("%d %d",&m,&n);
solve();
for(int i=0;i<10;i++)
if(i==0)
printf("%d",a[i]);
else
printf(" %d",a[i]);
printf("\n");
return 0;
}