NwafuOJ—C语言实习题四数据顺序调整

        今天过了一个卡了很多天的题,可能这道题看起来很简单(其实比较坑),但是作为一名初学者,也算是体验了一把“绿码”的快乐(一把辛酸泪),废话不多说,看题:

题目描述

由键盘任意输入10个数,将最大数调到最前面,最小数调到最后面。

输入

任意10个数

输出

数据调整后的10个数。

样例输入

0 1 2 3 4 5 6 7 8 9

样例输出

9 1 2 3 4 5 6 7 8 0

看题解:

#include

int a[10];


int main(){
    int i;
    for(i=0;i<10;++i){
        scanf("%d",&a[i]);
    }
    int j,t,max,min;
    max=0;min=0;
    for(i=0;i<9;i++){
        for(j=i+1;j<10;j++){
            if(a[j]>a[max]){   /*这里千万不能写成a[j]>a[i],因为i每次会递增*/
                max=j;         /* 而max中所存才是最大 如判断样例“0 1 2 3 6 5 4 7 8 9”*/
                break;}
            if(a[j]

        这道题也是对着样例调了好久,第一次体验到自己调对的快感,也总结了一些经验:

        1.if语句中要学会使用break和continue,前者可以理解为找到一个符合的就结束,而后者相反,找到一个继续找,直到遍历完为止。

        2.审题,尤其输入输出有无空格是否需要特判,否则常常出现格式错误。

        3.学会骗样例,照着样例找错误慢慢调,会比完全没有头绪快很多,如果一道题卡的比较久找不出问题,一定通读一遍代码,把所有情况都想到。

        本题在做时几个脑残问题:

        1.第一个if语句错把max == 0写成max=0,导致输出没有交换位置。

        2.max为定值可以为标兵而i不是,i每次递增1。

        3.输出最后一个数字无空格。

        4.if语句与if语句之间为顺序结构,保证不错进入一个if语句的要领是把范围卡死。

你可能感兴趣的:(oj题解,c++,c语言,算法)