首页 > 试题广场 >

互换最大最小数

[编程题]互换最大最小数
  • 热度指数:7845 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入一个数n,然后输入n个数值各不相同,调换数组中最大和最小的两个数,然后输出。

输入描述:
测试数据有多组,输入n(1<=n<=20),接着输入n个数。


输出描述:
对于每组输入,输出交换后的结果。
示例1

输入

2
1 3

输出

3 1

python solution:

while True:
    try:
        a,b=input(),list(map(int,input().split()))
        maxNum,minNum=b.index(max(b)),b.index(min(b))
        b[maxNum],b[minNum]=min(b),max(b)
        print(" ".join(map(str,b)))

    except:
        break
发表于 2017-10-03 17:52:59 回复(0)
#include<stdio.h>
int main()
{
    int n,a[20],i,max,maxindex,min,minindex;
    scanf("%d",&n);
    for(i=0;i<n;i++)//输入
        scanf("%d",&a[i]);
    max=a[0];min=a[0];maxindex=0;minindex=0;
    for(i=1;i<n;i++)
    {
        if(a[i]>max)//1.找最大值
        {max=a[i];maxindex=i;}
        if(a[i]<min)//2.找最小值
        {min=a[i];minindex=i;}
    }
    a[maxindex]=min;a[minindex]=max;//交换
    for(i=0;i<n;i++)//输出
        printf("%d ",a[i]);
}

发表于 2020-04-07 21:54:06 回复(0)
#include <iostream>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        int i,min=0,max=0,a[100];
        for(i=0;i<n;i++)
            cin>>a[i];
        for(i=1;i<n;i++){
            if(a[max]<a[i]){
                max=i;
                a[max]=a[i];
            }
            if(a[min]>a[i]){
                min=i;
                a[min]=a[i];
            }
        }
        int temp=a[max];
        a[max]=a[min];
        a[min]=temp;
        for(i=0;i<n-1;i++)
            cout<<a[i]<<" ";
        cout<<a[n-1]<<endl;
    }
    return 0;
}
发表于 2017-12-14 21:57:39 回复(1)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int N;
    while(cin>>N)
    {
        vector<int> vec(N,0);
        for(int i=0;i<N;i++)
            cin>>vec[i];
        int imax=vec[0];
        int imin=vec[0];
        int i=0,j=0;
        //找到最大值、最小值
        for(int k=1;k<N;k++)
        {
            if(vec[k]>imax)
            {
                imax=vec[k];
                i=k;
            }
            if(vec[k]<imin)
            {
                imin=vec[k];
                j=k;
            }
        }
        //交换
        swap(vec[i],vec[j]);
        //输出结果
        for(int k=0;k<N-1;k++)
            cout<<vec[k]<<" ";
        cout<<vec[N-1]<<endl;
    }
    return 0;
}

发表于 2016-08-22 22:06:07 回复(1)
#include<iostream>
using namespace std;
#include<algorithm>
int main(){
    int n;
    cin>>n;
    int a[n];
    int b[n];
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<n;i++){
        b[i]=a[i];     
    }
    sort(b,b+n);
    int *i = find(a,a+n,b[n-1]);
    int *j = find(a,a+n,b[0]);
    int temp = a[i-a];
    a[i-a] = a[j-a];
    a[j-a] = temp;
    for(int i=0;i<n ;i++){
        cout<<a[i]<<" ";
    }
    
    
    
    
}
发表于 2022-04-03 18:50:26 回复(0)
Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int n = scanner.nextInt();
            int[] a = new int[n];
            int min = Integer.MAX_VALUE;
            int minIndex=0;
            int max= Integer.MIN_VALUE;
            int maxIndex =0;
            for (int i = 0; i < n; i++) {
                a[i]= scanner.nextInt();
                if (a[i]>max){
                    max =a[i];
                    maxIndex = i;
                }
                if (a[i]<min){
                    min  =a[i];
                    minIndex = i;
                }
            }
            a[minIndex] = max;
            a[maxIndex]= min;
            for (int i : a) System.out.print(i+" ");
            System.out.println();
        }
    }
}


发表于 2020-03-19 20:46:01 回复(0)
#include<bits/stdc++.h>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int a[n];
    int min = 99999999;
    int max = -99999999;
    int b[2];
    for(int i = 0; i < n; i++)
    {
        cin >> a[i];
        if(a[i] > max)
        {
            max = a[i];
            b[0] = i;
        }
        if(a[i] < min)
        {
            min = a[i];
            b[1] = i;
        }
    }
    int temp;
    temp = a[b[0]];
    a[b[0]] = a[b[1]];
    a[b[1]] = temp;
    for(int i = 0; i < n - 1; i++)
    {
        cout << a[i] << " ";
    }
    cout << a[n - 1] << endl;
    return 0;
}

发表于 2020-02-07 17:27:11 回复(0)
//首先想到是遍历,然后记录最大最小的位置和值,然后对调,输入的时候顺便就遍历了,应该蛮便捷的了
#include<iostream>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        int* a=new int[n];
        int max=-99999999,min=99999999,max_pos=0,min_pos=0;
        for(int i=0;i<n;i++){
            cin>>a[i];
            if(a[i]>max)
                max=a[i],max_pos=i;
            if(a[i]<min)
                min=a[i],min_pos=i;
        }
        a[min_pos]=max;
        a[max_pos]=min;
        for(int i=0;i<n-1;i++)
            cout<<a[i]<<" ";
        cout<<a[n-1]<<endl;
    }
}

发表于 2020-01-12 21:31:40 回复(0)
#include<iostream>
using namespace std;
int main(){
    int n,i,k,p,max,min;
    while(cin>>n){
        int a[n];
        for(i=0;i<n;i++)
            cin>>a[i];
        for(i=0;i<n;i++){
            if(i==0)
            {
                max=a[0];
                min=a[0];
                p=k=0;
            }
            if(a[i]>max)
            {
                max=a[i];
                k=i;
            }
            if(a[i]<min)
            {
                min=a[i];
                p=i;
            }
        }
        int temp=a[k];
        a[k]=a[p];
        a[p]=temp;
        for(i=0;i<n-1;i++)
            cout<<a[i]<<" ";
        cout<<a[n-1]<<endl;
    }
    return 0;
}


发表于 2018-03-05 17:14:02 回复(0)
#include<stdio.h>
int main (){//the shorter,the better.
    int n,i,t,x,y,a[20];
    for(;~scanf("%d%d",&n,&a);){
       for (x=y=a[0],i=1;i<n&&~scanf("%d",&a[i]);x=x<a[i]?x:a[i],y=y>a[i]?y:a[i],i++);
       for (i=0;i<n&&printf(i<n-1?"%d ":"%d\n",a[i]==x?y:a[i]==y?x:a[i]);i++);
    }
}

发表于 2018-01-14 15:09:20 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	while(cin>>n)
	{
		int a[n];
		int minpos,maxpos,min=INT_MAX,max=-INT_MAX;
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
			if(a[i]<min)
			{
				min=a[i];
				minpos=i;
			}
			if(a[i]>max)
			{
				max=a[i];
				maxpos=i;
			}
		}
		//交换
		a[minpos]=max;
		a[maxpos]=min;
		
		for(int i=0;i<n-1;i++)	cout<<a[i]<<" ";
		cout<<a[n-1]<<endl;
	}
	return 0;
}

编辑于 2024-03-19 09:40:45 回复(0)
#include<stdio.h>
#include<vector>
using namespace std;
int main(){
    int N;
    vector<int> vec;
    int maxIndex=0,minIndex=0;
    scanf("%d",&N);
    for(int i=0;i<N;i++){
       int tmp;
       scanf("%d",&tmp);
       vec.push_back(tmp);
       if(vec[maxIndex]<vec[i]) maxIndex = i;
       if(vec[minIndex]>vec[i]) minIndex = i;
    }
    int tmp = vec[maxIndex];
    vec[maxIndex] = vec[minIndex];
    vec[minIndex] = tmp;
    for(int i=0;i<vec.size();i++){
        printf("%d ",vec[i]);
    }
}

发表于 2024-03-16 20:06:23 回复(0)
//题目没用说清楚 是输出全部内容 ,最值交换位置 而不是只输出最值
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {

    int arr[20],max=-2147483648,min=2147483647,x,maxpos=0,minpos=0;
    scanf("%d", &x);
    for (int i = 0; i < x; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (int i = 0; i < x; i++)
    {
        if (arr[i]>max)
        {
            max = arr[i];
            maxpos = i;
        }
        if (arr[i]<min)
        {
            min = arr[i];
            minpos = i;
        }
    }
    int tem =arr[minpos];
    arr[minpos] = arr[maxpos];
    arr[maxpos] = tem;
    for (int i = 0; i < x; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

 
发表于 2024-03-06 12:10:27 回复(0)
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

int main() {
    int n;
    while (cin >> n) {
        vector<int>arr(n);
        for (auto& e : arr) {
            cin >> e;
        }
        int max = -2147483648, min = 2147483647;    //最大值和最小值
        int* max_elem;  //指向最大数
        int* min_elem;  //指向最小数
        for (auto& e : arr) {
            if (max < e) {
                max = e;
                max_elem = &e;
            }
            if (min > e) {
                min = e;
                min_elem = &e;
            }
        }
        //交换最大数和最小数
        int temp = *max_elem;
        *max_elem = *min_elem;
        *min_elem = temp;
        //输出
        stringstream sstream;
        for (const auto& e : arr) {
            sstream << e << " ";
        }
        string str;
        getline(sstream, str);
        if (str[str.size() - 1] == ' ') {
            str = str.substr(0, str.size() - 1);    //去掉字符串尾部的空格
        }
        cout << str << endl;
    }
    return 0;
}

发表于 2024-02-02 11:01:28 回复(0)
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <array>

using namespace std;

int main() {
    int n;
    while (cin >> n) {
        vector<int> v(n);
        for (int i = 0; i < n; i++) {
            cin >> v[i];
        }
        auto mi = min_element(v.begin(), v.end());
        auto ma = max_element(v.begin(), v.end());
        iter_swap(mi, ma);
        for (int i = 0; i < n; i++) {
            cout << v[i] << " ";
        }
        cout << endl;
    }
}

编辑于 2024-01-22 21:15:50 回复(0)
#include <stdio.h>
#define MAX 20
int main() {
    int matrix[MAX];

    int minpos = 0,maxpos = 0,n;
   
    scanf("%d",&n);
    for(int i = 0; i < n; i++)
        scanf("%d",&matrix[i]);

    for(int i = 0; i < n; i++){

        if(matrix[i] < matrix[minpos])
            minpos = i;
        if(matrix[i] > matrix[maxpos])
            maxpos = i;
    }

    int t = matrix[minpos];
    matrix[minpos] = matrix[maxpos];
    matrix[maxpos] = t;

     for(int i = 0; i < n; i++)
            printf("%d ", matrix[i]);
    return 0;
}
编辑于 2024-01-13 20:13:08 回复(0)
用数组保存一整行的数字,找到最大最小值,并标记好下标。用swap函数交换最大最小值,输出。
#include <cstdio>
#include <algorithm>
#include <climits>
using namespace std;

int main(){
    int n;
    while(scanf("%d",&n) != EOF){
        int arr[n];
        int maxi = -INT_MAX , mini = INT_MAX;
        int nmax , nmin; //最大最小值的下标
        for(int i = 0; i < n; ++i){  
            scanf("%d",&arr[i]);
            if(arr[i] > maxi){
                maxi = arr[i]; //1.存入
                nmax = i;      //2.存下标
            } 
            if(arr[i] < mini){
                mini = arr[i];
                nmin = i;
            } 
        }

        swap(arr[nmax],arr[nmin]); //3.交换
        for(int i = 0; i < n; ++i){//4.输出
            printf("%d ",arr[i]);
        }
        printf("\n");
    }
    return 0;
}


发表于 2023-03-24 21:00:26 回复(0)
#include <stdio.h>

int main() {
    int n, a[20], pmax = 0, pmin = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i ++) {
        scanf("%d", &a[i]);
    }
    for (int i = 1; i < n; i ++) {
        if(a[i]>a[pmax]){
            pmax = i;
        }
        if(a[i]<a[pmin]){
            pmin = i;
        }
    }
    int temp = a[pmax];
    a[pmax] = a[pmin];
    a[pmin] = temp;
    for (int i = 0; i < n; i ++) {
        printf("%d ", a[i]);
    }
    return 0;
}

发表于 2023-03-12 15:19:17 回复(0)
#include<stdio.h>
#include<stdlib.h>

int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		int ma,mi;
		int max_i=0;//最大值的索引
		int min_i=0;//最小值的索引
		int *num=(int *)malloc(sizeof(int)*n);
		for(int i=0;i<n;i++){
			int temp;
			scanf("%d",&temp);
			num[i]=temp;
		}
		if(num[0]>=num[1]){
			max_i=0;
			min_i=1;
			ma=num[0];
			mi=num[1];
		}
		else{
			max_i=1;
			min_i=0;
			ma=num[1];
			mi=num[0];
		}
		for(int k=2;k<n;k++){
			if(num[k]>ma){
				max_i=k;
				ma=num[k];
			}
			else if(num[k]<mi){
				min_i=k;
				mi=num[k];
			}
		}
		int t=num[max_i];
		num[max_i]=num[min_i];
		num[min_i]=t;
		for(int j=0;j<n;j++)
			printf("%d ",num[j]);
		printf("\n");
	}
}

发表于 2022-01-28 19:40:45 回复(0)
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 25;
int main() {
	int n, num[maxn];
	while(cin >> n) { 
		int max = 0, min = 0;//最大/小数下标
		for(int i = 0; i < n; ++i) {
			cin >> num[i]; 
			if(num[i] > num[max]) max = i;
			else if(num[i] < num[min]) min = i;
		}
		swap(num[max], num[min]);
		for(int i = 0; i < n; ++i)
			cout << num[i] << " ";
		cout << endl;
	}
	return 0;
}

发表于 2021-03-11 21:50:39 回复(0)

问题信息

难度:
72条回答 6180浏览

热门推荐

通过挑战的用户

查看代码