名校复试上机题,要求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就行啦
[解决办法]
哦 ? 第一次听说不让调快排的呀 呵呵 这是哪个学校啊
[解决办法]
#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;}
[解决办法]
#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;}
[解决办法]
#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;}