HDU1106 排序

来源:互联网 发布:男装批发软件 编辑:程序博客网 时间:2024/05/22 08:08

问题链接:HDU1106 排序。

问题简述:参见上述链接。

问题分析这个程序的逻辑并不十分复杂,主要是字符串处理和数字字符串转整数的问题。

程序说明转换后的整数需要排序,但这不是重点。排序使用库函数qsort()来实现。

因为5被看作空格,需要注意的点有:

1.开始的若干个5需要跳过去;

2.最后的若干个5需要跳过去;

3.字符串全部是5的时候,需要正确处理(俺就吃亏在这里,开始一直没有AC);

4.中间的若干个5需要正确跳过去。

程序中使用了标志flag5,来处理若干个5。

数字串转整数的逻辑与atoi相同。

本程序的优点在于逻辑清晰简洁。

参见:HDU1106 排序(解法二)。该程序更加简洁一些。

AC的C语言程序如下:

/* HDU1106 排序 */#include <stdio.h>#include <stdlib.h>int cmp(const void *a,const void *b){    return *(int*)a - *(int*)b;}int main(void){    char figure;    int val=0, values[2000], count, flag5=1, i;    while(scanf("%c", &figure)!=EOF) {        if(figure == '\n') {            if(flag5 == 0)                values[count++] = val;            if(count > 0) {                qsort(values, count, sizeof(values[0]), cmp);                for(i=0; i<count-1; i++)                    printf("%d ", values[i]);                printf("%d\n", values[count-1]);            }            val = 0;            count = 0;            flag5 = 1;        } else if(figure == '5') {            if(flag5 == 0)                values[count++] = val;            val = 0;            flag5 = 1;        } else {            val = val * 10 + figure - '0';            flag5 = 0;        }    }    return 0;}


1 0
原创粉丝点击