codeup-C语言-数字交换

Problem A: C语言-数字交换

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 1086  Solved: 391
[Submit][Status][Web Board][Creator:Imported]

Description

输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。

Input

10个整数

Output

整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)

Sample Input

2 1 3 4 5 6 7 8 10 9

Sample Output

1 2 3 4 5 6 7 8 9 10 

 

刚开始思考的时候,没有想到特殊情况,即最大值就在第一个位置。

然后,看了别人的提示,自己写的时候,又把问题想复杂了,即:

最大的在第一个 最小的在最后一个
最大的在第一个 最小的不在最后一个
最大的不在第一个 最小的在最后一个
最大的不在第一个 最小的不在最后一个
最大最小的值相同

好歹,在codeup的OJ上通过了,但是这个思维真的很复杂。

参看别人的代码,只分了  最大值就在or不在第一个位置   两种情况。

大神代码连接:https://blog.csdn.net/nanke_4869/article/details/99655220

我的代码:

#include <iostream> 
#include <vector>
using namespace std;

void exchange(int &a, int &b){
    int temp = a;
    a = b;
    b = temp;
}

int main(){
    vector<int> v;
    int temp, maxn, minn, k1, k2;
    while(scanf("%d", &temp) != EOF){
        v.clear();
        k1 = 0;
        k2 = 0;
        maxn = temp;
        minn = temp;
        v.push_back(temp);
        for(int i=1; i<10; i++){
            scanf("%d", &temp);
            if(maxn < temp){
                maxn = temp;
                k1 = i;
            }
            if(minn > temp){
                minn = temp;
                k2 = i;
            }
            v.push_back(temp);
        }
        //最小与第一个交换
        if(k1 != k2){
            if(k1 != 0){ //最大的不在第一个 
                exchange(v[0], v[k2]);
                if(k1 != 9){ //最大的已在最后一个 
                    exchange(v[9], v[k1]);
                }
            }else{ //最大的在第一个 
                if(k2==9){ //最小的在最后一个 
                    exchange(v[0], v[9]);
                }else{
                    //注意要先把最大的放在最后一位! 
                    exchange(v[9], v[k1]);
                    exchange(v[0], v[k2]);
                }
            }
        }
        for(int i=0; i<10; i++){
            printf("%d ", v[i]);
        }
        printf("
");
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/heyour/p/12157096.html