首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

名校复试上机题,要求12分钟内解决,各位来瞧瞧看咯解决方法

2012-04-19 
名校复试上机题,要求12分钟内解决,各位来瞧瞧看咯设计一个程序,从in.txt读入数据,对每一行的数字都单独按

名校复试上机题,要求12分钟内解决,各位来瞧瞧看咯
设计一个程序,从in.txt读入数据,对每一行的数字都单独按从大到小的顺序排序,将结果输出到out.txt。每一行的数字第一个字符是数字标志,每个数字之间用空格隔开。

in.txt:
3 12 -20 49
4 11 21 -49 90

out.txt:
3 -20 12 49
4 -49 11 21 90


PS:本人原来做过C#开发,以上程序用C#可以较为轻松的解决,但在使用C语言的过程中遇到诸多问题,发现很难在12分钟内搞定。亲们帮忙看看,也测试一下名校上机题是不是很简单,12分钟内哦。

[解决办法]
呵呵 回忆还把最关键的数据范围给忘了 开个最大数组 直接用qsort就行啦
[解决办法]
哦 ? 第一次听说不让调快排的呀 呵呵 这是哪个学校啊
[解决办法]

C/C++ code
#include <stdio.h>#include <stdlib.h>void sort(int *data, int length){    int i, j, tmp;    for(i = 0; i < length - 1; ++i)    {        for(j = 0; j < length - i -1; ++j)        {            if(data[j] > data[j+1])            {                tmp = data[j];                data[j] = data[j+1];                data[j+1] = tmp;            }        }    }}void getData(){    int *data, length, i;    FILE *in, *out;    in = fopen("in.txt", "r");    out = fopen("out.txt", "w");    if(in == NULL || out == NULL)        exit(1);    while(1)    {        fscanf(in, "%d", &length);        if(feof(in))            break;        data = (int*)malloc(sizeof(int)*length);        for(i = 0; i < length; ++i)            fscanf(in, "%d", &data[i]);        sort(data, length);        fprintf(out, "%d ", length);        for(i = 0; i < length; ++i)            fprintf(out, "%d ", data[i]);        fprintf(out, "\n");        free(data);    }    fclose(in);    fclose(out);}int main (){    getData();    system("pause");    return 0;}
[解决办法]
C/C++ code
#include <stdio.h>#include <string.h>#include <stdlib.h>#define INPUT_FILE_PATH        "/home/apps/tmp/in"#define OUTPUT_FILE_PATH    "/home/apps/tmp/out"static int *line_to_arr(char *line, int *arr_len){    *arr_len = atoi(line);    int *arr = (int *)malloc(*arr_len);    char *cp;    strtok_r(line, " ", &cp);    int i;    for(i=0; i<*arr_len; ++i) {        arr[i] = atoi(strtok_r(NULL, " ", &cp));    }    return arr;}static int msort(int *arr, int arr_len){        return 0;}int work(void){    FILE *fp_in = fopen(INPUT_FILE_PATH, "r");    FILE *fp_out = fopen(OUTPUT_FILE_PATH, "w");    if((!fp_in) || (!fp_out)) return -1;    char line[1024];    int arr_len;    int *arr;    while(fgets(line, sizeof(line), fp_in)!=NULL) {        arr = line_to_arr(line, &arr_len);        msort(arr, arr_len);        int i;        fprintf(fp_out, "%d", arr_len);        for(i=0; i<arr_len; ++i) {            fprintf(fp_out, " %d", arr[i]);        }        fprintf(fp_out, "\n");        free(arr);    }        return 0;}int main(int argc, char *argv[]){    work();    return 0;}
[解决办法]
C/C++ code
#include <stdio.h>#include <string.h>#include <stdlib.h>#define INPUT_FILE_PATH        "/home/apps/tmp/in"#define OUTPUT_FILE_PATH    "/home/apps/tmp/out"static int *line_to_arr(char *line, int *arr_len){    *arr_len = atoi(line);    int *arr = (int *)malloc(*arr_len);    char *cp;    strtok_r(line, " ", &cp);    int i;    for(i=0; i<*arr_len; ++i) {        arr[i] = atoi(strtok_r(NULL, " ", &cp));    }    return arr;}static int msort(int *arr, int arr_len){    if(arr_len<2) return 0;    int i;    int swap = 1;    while(swap) {        swap = 0;        for(i=0; i<arr_len-1; ++i) {            if(arr[i]>arr[i+1]) {                swap = arr[i];                arr[i] = arr[i+1];                arr[i+1] = swap;                swap = 1;            }        }    }    return 0;}int work(void){    FILE *fp_in = fopen(INPUT_FILE_PATH, "r");    FILE *fp_out = fopen(OUTPUT_FILE_PATH, "w");    if((!fp_in) || (!fp_out)) return -1;    char line[1024];    int arr_len;    int *arr;    while(fgets(line, sizeof(line), fp_in)!=NULL) {        arr = line_to_arr(line, &arr_len);        msort(arr, arr_len);        int i;        fprintf(fp_out, "%d", arr_len);        for(i=0; i<arr_len; ++i) {            fprintf(fp_out, " %d", arr[i]);        }        fprintf(fp_out, "\n");        free(arr);    }        return 0;}int main(int argc, char *argv[]){    work();    return 0;} 

热点排行