|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8
这个题怎么做
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int arr[n];int i;int max;
int min;int temp;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
for(int i=0;i<n;i++)
{
max=arr[i]>=arr[i+1]?i:i+1;
min=arr[i]<=arr[i+1]?i:i+1;
temp=arr[max];
arr[max]=arr[min];
arr[min]=temp;
cout<<arr[i]<<" ";
}
}
我的代码哪里错了,要怎么改
你的代码有几个问题。首先,你在循环中使用了两个相邻元素进行比较,但是在最后一次循环时, arr[i+1] 是越界的,会导致程序崩溃。其次,你没有正确交换最小值和第一个数,以及最大值和最后一个数。最后,你应该在循环结束后输出整个交换后的序列,而不是在每次循环中输出一个元素。
下面是修改后的代码:
- #include<iostream>
- using namespace std;
- int main()
- {
- int n;
- cin>>n;
- int arr[n];
- int maxIndex = 0;
- int minIndex = 0;
- for(int i=0;i<n;i++)
- {
- cin>>arr[ i];
- if(arr[ i] > arr[maxIndex])
- {
- maxIndex = i;
- }
- if(arr[ i] < arr[minIndex])
- {
- minIndex = i;
- }
- }
- int temp = arr[minIndex];
- arr[minIndex] = arr[0];
- arr[0] = temp;
-
- temp = arr[maxIndex];
- arr[maxIndex] = arr[n-1];
- arr[n-1] = temp;
-
- for(int i=0;i<n;i++)
- {
- cout<<arr[ i]<<" ";
- }
- return 0;
- }
复制代码
这样修改后的代码会正确地交换最小值和第一个数,以及最大值和最后一个数,并且输出交换后的整个序列。
希望对你有所帮助!如果你还有其他问题,请随时提问。
|
|