zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    泛型的内部原理:类型擦除以及类型擦除带来的问题
    Redis的那些最常见面试问题
    线程池全面解析
    对线程调度中Thread.sleep(0)的深入理解
    集群环境下Redis分布式锁
    3.8
    3.7
    3.6任务
    3.5任务
    3.4
  • 原文地址:https://www.cnblogs.com/heyour/p/12157096.html
Copyright © 2011-2022 走看看