HDU1106 排序
问题链接: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;
} 
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号