Board logo

标题: 成绩单排序(多条件)挑战 [打印本页]

作者: ivor    时间: 2019-5-30 22:13     标题: 成绩单排序(多条件)挑战

本帖最后由 ivor 于 2019-6-1 10:00 编辑

同时满足以下条件:
1.语文升序
2.数学降序
3.英语升序
4.化学降序
5.生物升序

每一行的数据不能改变,排序最小单位是行,条件是列

不限制语言,数据约1w条。1秒内

样本:
语文 数学 英语 化学 生物
79 77 70 77 67
64 70 74 75 72
79 64 72 62 76
62 75 65 71 63
79 76 62 62 77
66 63 77 75 79
74 75 72 61 61
71 63 79 60 70
74 64 74 78 69


抛砖引玉
  1. GC "1.txt"  | select @{name='语文'; expression={$_.split(" ")[0]}},
  2. @{name='数学'; expression={$_.split(" ")[1]}},
  3. @{name='英语'; expression={$_.split(" ")[2]}},
  4. @{name='化学'; expression={$_.split(" ")[3]}},
  5. @{name='生物'; expression={$_.split(" ")[4]}} | `
  6. Sort-Object -Property @{Expression = {$_.语文}; Ascending = $true},
  7. @{Expression = {$_.数学}; Ascending = $false},
  8. @{Expression = {$_.英语}; Ascending = $true},
  9. @{Expression = {$_.化学}; Ascending = $false},
  10. @{Expression = {$_.生物}; Ascending = $true}
复制代码

作者: 523066680    时间: 2019-5-30 22:36

  1. use Encode;
  2. use File::Slurp;
  3. STDOUT->autoflush(1);
  4. my @lines = read_file("src.txt");
  5. my $head = shift @lines;
  6. my @mat = map { s/\r?\n$//; [split " ", $_]; } @lines;
  7. @mat = sort {
  8.     $a->[0] <=> $b->[0] ||
  9.     $b->[1] <=> $a->[1] ||
  10.     $a->[2] <=> $b->[2] ||
  11.     $b->[3] <=> $a->[3] ||
  12.     $a->[4] <=> $b->[4]
  13. } @mat;
  14. grep { printf "%s\n", join(",", @$_); } @mat;
复制代码
  1. 62,75,65,71,63
  2. 64,70,74,75,72
  3. 66,63,77,75,79
  4. 71,63,79,60,70
  5. 74,75,72,61,61
  6. 74,64,74,78,69
  7. 79,77,70,77,67
  8. 79,76,62,62,77
  9. 79,64,72,62,76
复制代码
不知道理解的对不对,升降升降升,分级排序。
作者: xczxczxcz    时间: 2019-5-30 22:50

本帖最后由 xczxczxcz 于 2019-5-31 06:54 编辑

把你的数据复制粘贴了15363多条,耗时 1.06秒。

修改了一下返回值: 现在 0.8秒。

再试试C#.
用VSCODE  写C#  编译结果15ms  输出到文本24ms。VS2019 编译 27ms  写入文本56ms。
作者: 老刘1号    时间: 2019-5-31 12:22

有种使用excel的冲动
作者: WHY    时间: 2019-6-1 00:42

  1. var fso = new ActiveXObject('Scripting.FileSystemObject');
  2. var txt = fso.OpenTextFile('1.txt', 1).ReadAll();
  3. var arr = txt.replace(/^(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)(?:\r\n|$)/mg,
  4.     function(s0, s1, s2, s3, s4, s5){
  5.         return 100 + 1*s1 + '' + (200 - s2) + '' + (100 + 1*s3) + '' + (200 - s4) + '' + (100 + 1*s5) + ' ' + s0;
  6.     }
  7. ).split(/\r\n/).sort();
  8. fso.OpenTextFile('2.txt', 2, true).Write(arr.join('\r\n').replace(/^\d+ /mg, ''));
复制代码

作者: WHY    时间: 2019-6-1 00:46

  1. $Code = @"
  2.     using System;
  3.     using System.Linq;
  4.     using System.Text.RegularExpressions;
  5.     using System.Collections.Generic;
  6.     public static class Program {
  7.         public static IEnumerable<string> Run(string[] lines) {
  8.             var query = from line in lines
  9.                         let m = Regex.Match(line, @"^(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$")
  10.                         where m.Success == true
  11.                         orderby int.Parse(m.Groups[1].Value), int.Parse(m.Groups[2].Value) descending, int.Parse(m.Groups[3].Value),
  12.                                 int.Parse(m.Groups[4].Value) descending, int.Parse(m.Groups[5].Value)
  13.                         select line;
  14.             return query;
  15.         }
  16.     }
  17. "@;
  18. Add-Type -TypeDefinition $Code;
  19. $arr = [IO.File]::ReadAllLines('1.txt');
  20. [IO.File]::WriteAllLines('2.txt', [Program]::Run($arr));
  21. pause
复制代码

作者: CrLf    时间: 2019-6-1 01:21

用bat对付一万行的数据,到1.4秒貌似下不去了:
  1. @echo off & setlocal enabledelayedexpansion
  2. echo %time% - 开始
  3. for /l %%a in (0 1 99) do (
  4. set /a B=10%%a,L=200-%%a
  5. set B%%a=!B:~-2!
  6. set L%%a=!L:~-2!
  7. )
  8. set B100=xx
  9. set L100=--
  10. echo %time% - 构建映射表
  11. (for /f "skip=1 tokens=1-5" %%a in (test.txt) do (
  12. echo !B%%a!!L%%b!!B%%c!!L%%d!!B%%e! %%a %%b %%c %%d %%e
  13. ))>tmp.txt
  14. echo %time% - 输出临时文件
  15. (echo 语文 数学 英语 化学 生物
  16. for /f "tokens=1*" %%a in ('sort tmp.txt') do echo %%b
  17. )>out.txt
  18. echo %time% - 结束
  19. pause & exit /b
复制代码
附测试数据生成脚本
  1. @echo off & setlocal enabledelayedexpansion
  2. (echo 语文 数学 英语 化学 生物
  3. for /l %%a in (1 1 10000) do (
  4. set /a R1=!random!%%101,R2=!random!%%101,R3=!random!%%101,R4=!random!%%101,R5=!random!%%101
  5. echo !R1! !R2! !R3! !R4! !R5!
  6. ))>test.txt
  7. pause
复制代码

作者: ivor    时间: 2019-6-1 08:13

回复 7# CrLf


    结果不正确,少一行数据
作者: 523066680    时间: 2019-6-1 09:35

加糖,类似5楼操作。
pack - "C"  An unsigned char (octet) value.
打包后的数据是字节对齐的。
  1. use File::Slurp;
  2. STDOUT->autoflush(1);
  3. my @lines = read_file("src.txt");
  4. my $head = shift @lines;
  5. grep {
  6.     my $it = 0;
  7.     printf "%s\n", join(",", map { $it++%2 ? 100-$_ : $_ } unpack("C*", $_));
  8. } sort map {
  9.         my $it = 0;
  10.         s/\r?\n$//;
  11.         pack("C*", map { $it++%2 ? 100-$_ : $_ } split " ", $_);
  12.     } @lines;
复制代码

作者: 523066680    时间: 2019-6-1 18:28

本帖最后由 523066680 于 2019-6-2 07:50 编辑

PS+C Sharp 处理1W行具体时间是多少, 不懂PS 和 C Sharp

在网上找了一下 时间获取方法:
  1. $start = Get-Date
  2. # 中间代码
  3. $end = Get-Date
  4. Write-Host -ForegroundColor Red ('Total Runtime: ' + ($end - $start).TotalSeconds)
复制代码
Total Runtime: 0.1280073

perl pack 字节流方案  0.08 秒

去掉 unpack 改为按数组索引处理
  1. use File::Slurp;
  2. use Time::HiRes qw/time/;
  3. my $ta = time();
  4. my @lines = read_file("test.txt");
  5. my $head = shift @lines;
  6. my $buff = "";
  7. my @dupl = map {
  8.     my $it = 0;
  9.     s/\r?\n$//;
  10.     pack("C*", map { $it++%2 ? 100-$_ : $_ } split " ", $_);
  11. } @lines;
  12. my @idx = sort { $dupl[$a] cmp $dupl[$b] } (0..$#dupl);
  13. grep { $buff .= $lines[$_] ."\r\n" } @idx;
  14. write_file("pl_out.txt", {binmode=>"raw"}, $buff);
  15. printf "%.3f\n", time() - $ta;
复制代码
含文件输出 0.046s

2楼代码改文件输出 0.045s
作者: WHY    时间: 2019-6-1 22:47

回复 11# 523066680


    是的,如果非常在意零点几秒速度的话,这个问题用 PowerShell 来解不合适,甚至比不过 js 脚本。
但多一种解题思路总是好的,并且 PowerShell 功能强大,速度也不算慢。关键是用它能方便地解决问题,又是系统自带,我认为这就够了。
作者: 523066680    时间: 2019-6-2 07:54

本帖最后由 523066680 于 2019-6-2 07:55 编辑

回复 12# WHY

    不在意秒,之前也未报时间。而是ivor写的 "最" 有一种钦定的意思,后面还有未发帖的人呢。ivor已经回复我了。
作者: cfwyy77_bat    时间: 2019-6-2 11:15

小白来个python版的:
  1. file = "test.txt"
  2. result = "res.txt"
  3. with open(file,"r",encoding="utf8") as f:
  4.     head = f.readline()    #读第一行头
  5.     gen = (tuple(int(x) for x in line.split()) for line in f)
  6.     res = sorted(gen,key=lambda x:(x[0],-x[1],x[2],-x[3],x[4]))  #多条件排序,取负值按降序
  7. with open(result,"w") as f:
  8.     f.write(head)         #写第一行头
  9.     for i in res:
  10.         f.write(" ".join(str(x) for x in i)) #拼接成字符串写入
  11.         f.write("\n")
复制代码
python性能肯定不是最快的,用了7楼CrLf生成的测试数据1W条,运行完成时间是0.33秒左右。
作者: Batcher    时间: 2019-6-2 12:27

有种使用数据库的冲动
作者: CrLf    时间: 2019-6-2 15:03

回复 8# ivor


    skip=1跳过标题行了。测试数据不包含标题行吗?
作者: Gin_Q    时间: 2020-2-24 18:53

本帖最后由 Gin_Q 于 2020-2-26 09:56 编辑
  1. //Dev-C++ 5.11
  2. //排序算法用的是选择排序
  3. //by Gin
  4. #include <time.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #define LINE_SIZE 100 //行存储大小
  9. FILE *fp(char *,const char *);
  10. int check_width(FILE *fp);
  11. int check_high(FILE *fp);
  12. int main(int argc,char *argv[])
  13. {
  14. clock_t start_t,end_t; //计时
  15. double time_sum; //储存时间
  16. start_t=clock(); //开始计时
  17. FILE *a_txt=fp(argv[1],"r");
  18. FILE *b_txt=fp(argv[2],"w");
  19. int width=0,high=0;
  20. width=check_width(a_txt);
  21. high=check_high(a_txt);
  22. void anay(char *,char *,int linesize,int width); //把二维素组做一维数组传递
  23. void init(char *,int  *,int linesize,int width); //把二维素组做一维数组传递
  24. void sort_min_max(int *p,int high,int width,int n); //小到大
  25. void sort_max_min(int *p,int high,int width,int n); //大到小
  26. void res_print(FILE *fp,int *p,int high,int width,char *p_kemu,char *kemu,char *way,char *form,char *form_1,char *form_2); //打印结果
  27. char mu[LINE_SIZE]="0"; //储存第一行数据
  28. char temp_1[high][width]={"0"};   //存储分割好的数据
  29. char temp[LINE_SIZE]="0"; //存储一行数据
  30. int arr[high][width]={0}; //存储最终数组
  31. int (*p_arr)[width]=arr;
  32. char kemu[5][7]={"0"};
  33. char *p_kemu=kemu[0];
  34. char original[40]="原数据";
  35. char min_m[7]="小到大";
  36. char max_m[7]="大到小";
  37. char form[8]="+-----+";
  38. char form_1[8]="-----+";
  39. char form_2[2]="|";
  40. char spk[2]="\0";
  41. rewind(a_txt);
  42. fgets(mu,LINE_SIZE,a_txt);
  43. anay(mu,(char*)kemu,7,width);
  44. int i;
  45. for (i=0;fgets(temp,LINE_SIZE,a_txt)!=NULL;i++)
  46. {
  47. anay(temp,temp_1[0],width,width);      //将数据分割成二维字符串
  48. init(temp_1[0],arr[i],width,width);   //将二维字符串赋值给二维数组
  49. }
  50. res_print(b_txt,(int *)arr,high,width,p_kemu,spk,original,form,form_1,form_2);
  51. fputc('\n',b_txt);
  52. int mark=0; //0代表升序,1代表降序
  53. for (i=0;i<width;i++)
  54. {
  55. if (mark==0)
  56. {
  57. sort_min_max((int *)arr,high,width,i);
  58. mark=1;
  59. res_print(b_txt,(int *)arr,high,width,p_kemu,kemu[i],min_m,form,form_1,form_2);
  60. }
  61. else if (mark==1)
  62. {
  63. sort_max_min((int *)arr,high,width,i);
  64. mark=0;
  65. res_print(b_txt,(int *)arr,high,width,p_kemu,kemu[i],max_m,form,form_1,form_2);
  66. }
  67. if (i<(high-1)) fputs("\n",b_txt);
  68. }
  69. end_t=clock();
  70. time_sum=(double)(end_t-start_t)/CLOCKS_PER_SEC;
  71. fprintf(b_txt,"程序耗时:%f",time_sum);
  72. fclose(a_txt);
  73. fclose(b_txt);
  74. return 0;
  75. }
  76. FILE *fp(char *p,const char *mode)
  77. {
  78. FILE *pp;
  79. if ((pp= fopen(p,mode))==NULL)
  80. {
  81. printf("open fail! %s",p);
  82. getchar();
  83. exit (0);
  84. }
  85. return pp;
  86. }
  87. //检查数据
  88. int check_width(FILE *fp)
  89. {
  90. rewind(fp);
  91. char delims='0';
  92. int w=1;
  93. for (;(delims=fgetc(fp))!='\n';)
  94. {
  95. if (delims==' ') w++;
  96. }
  97. return w;
  98. }
  99. int check_high(FILE *fp)
  100. {
  101. rewind(fp);
  102. int h=0;
  103. char arr[LINE_SIZE];
  104. for (;fgets(arr,LINE_SIZE,fp)!=NULL;h++);
  105. return h-1; //去掉第一行不算
  106. }
  107. void anay(char *p,char *t,int linesize, int width)
  108. {
  109. int i,j=0,k=0; //j第二维,k第一维
  110. for (i=0;*(p+i)!='\0';i++)
  111. {
  112. if (*(p+i)!=' ' && *(p+i)!='\n')
  113. {
  114. *(t+j*linesize+k)=*(p+i);
  115. k++;
  116. }
  117. else
  118. {
  119. *(t+j*linesize+k)='\0';
  120. j++,k=0;
  121. }
  122. }
  123. }
  124. void init(char *p,int *p1,int linesize,int width)
  125. {
  126. int i;
  127. for (i=0;i<width;i++)
  128. {
  129. *(p1+i)=atoi(p+i*linesize);
  130. }
  131. }
  132. void sort_min_max(int *p,int high,int width,int n)
  133. {
  134. int i,k,l,temp=0;
  135. for (i=0;i<high-1;i++)
  136. {
  137. for (k=i+1;k<high;k++)
  138. {
  139. if (*(p+k*width+n)<*(p+i*width+n))
  140. {
  141. for (l=0;l<width;l++)
  142. {
  143. temp=*(p+k*width+l);
  144. *(p+k*width+l)=*(p+i*width+l);
  145. *(p+i*width+l)=temp;
  146. }
  147. }
  148. }
  149. }
  150. }
  151. void sort_max_min(int *p,int high,int width,int n)
  152. {
  153. int i,k,l,temp=0;
  154. for (i=0;i<high-1;i++)
  155. {
  156. for (k=i+1;k<high;k++)
  157. {
  158. if (*(p+k*width+n)>*(p+i*width+n))
  159. {
  160. for (l=0;l<width;l++)
  161. {
  162. temp=*(p+k*width+l);
  163. *(p+k*width+l)=*(p+i*width+l);
  164. *(p+i*width+l)=temp;
  165. }
  166. }
  167. }
  168. }
  169. }
  170. void res_print(FILE *fp,int *p,int high,int width,char *p_kemu,char *kemu,char *way,char *form,char *form_1,char *form_2)
  171. {
  172. fprintf(fp,"%s%s%s%s%s\n",form,form_1,form_1,form_1,form_1);
  173. fprintf(fp,"%s%6s%-23s%s\n",form_2,way,kemu,form_2);
  174. fprintf(fp,"%s%s%s%s%s\n",form,form_1,form_1,form_1,form_1);
  175. for (int i=0;i<width;i++) fprintf(fp,"%s%-5s",form_2,(p_kemu+i*7));
  176. fprintf(fp,"%s\n%s%s%s%s%s\n",form_2,form,form_1,form_1,form_1,form_1);
  177. int i,j;
  178. for (i=0;i<high;i++)
  179. {
  180. for (j=0;j<width;j++)
  181. {
  182. fprintf(fp,"%s%-5d",form_2,*(p+i*width+j));
  183. }
  184. fprintf(fp,"%s\n",form_2);
  185. fprintf(fp,"%s%s%s%s%s",form,form_1,form_1,form_1,form_1);
  186. fputc('\n',fp);
  187. }
  188. }
复制代码
结果:
  1. +-----+-----+-----+-----+-----+
  2. |原数据                       |
  3. +-----+-----+-----+-----+-----+
  4. |语文 |数学 |英语 |化学 |生物 |
  5. +-----+-----+-----+-----+-----+
  6. |79   |77   |70   |77   |67   |
  7. +-----+-----+-----+-----+-----+
  8. |64   |70   |74   |75   |72   |
  9. +-----+-----+-----+-----+-----+
  10. |79   |64   |72   |62   |76   |
  11. +-----+-----+-----+-----+-----+
  12. |62   |75   |65   |71   |63   |
  13. +-----+-----+-----+-----+-----+
  14. |79   |76   |62   |62   |77   |
  15. +-----+-----+-----+-----+-----+
  16. |66   |63   |77   |75   |79   |
  17. +-----+-----+-----+-----+-----+
  18. |74   |75   |72   |61   |61   |
  19. +-----+-----+-----+-----+-----+
  20. |71   |63   |79   |60   |70   |
  21. +-----+-----+-----+-----+-----+
  22. |74   |64   |74   |78   |69   |
  23. +-----+-----+-----+-----+-----+
  24. +-----+-----+-----+-----+-----+
  25. |小到大语文                   |
  26. +-----+-----+-----+-----+-----+
  27. |语文 |数学 |英语 |化学 |生物 |
  28. +-----+-----+-----+-----+-----+
  29. |62   |75   |65   |71   |63   |
  30. +-----+-----+-----+-----+-----+
  31. |64   |70   |74   |75   |72   |
  32. +-----+-----+-----+-----+-----+
  33. |66   |63   |77   |75   |79   |
  34. +-----+-----+-----+-----+-----+
  35. |71   |63   |79   |60   |70   |
  36. +-----+-----+-----+-----+-----+
  37. |74   |75   |72   |61   |61   |
  38. +-----+-----+-----+-----+-----+
  39. |74   |64   |74   |78   |69   |
  40. +-----+-----+-----+-----+-----+
  41. |79   |77   |70   |77   |67   |
  42. +-----+-----+-----+-----+-----+
  43. |79   |76   |62   |62   |77   |
  44. +-----+-----+-----+-----+-----+
  45. |79   |64   |72   |62   |76   |
  46. +-----+-----+-----+-----+-----+
  47. +-----+-----+-----+-----+-----+
  48. |大到小数学                   |
  49. +-----+-----+-----+-----+-----+
  50. |语文 |数学 |英语 |化学 |生物 |
  51. +-----+-----+-----+-----+-----+
  52. |79   |77   |70   |77   |67   |
  53. +-----+-----+-----+-----+-----+
  54. |79   |76   |62   |62   |77   |
  55. +-----+-----+-----+-----+-----+
  56. |62   |75   |65   |71   |63   |
  57. +-----+-----+-----+-----+-----+
  58. |74   |75   |72   |61   |61   |
  59. +-----+-----+-----+-----+-----+
  60. |64   |70   |74   |75   |72   |
  61. +-----+-----+-----+-----+-----+
  62. |74   |64   |74   |78   |69   |
  63. +-----+-----+-----+-----+-----+
  64. |79   |64   |72   |62   |76   |
  65. +-----+-----+-----+-----+-----+
  66. |71   |63   |79   |60   |70   |
  67. +-----+-----+-----+-----+-----+
  68. |66   |63   |77   |75   |79   |
  69. +-----+-----+-----+-----+-----+
  70. +-----+-----+-----+-----+-----+
  71. |小到大英语                   |
  72. +-----+-----+-----+-----+-----+
  73. |语文 |数学 |英语 |化学 |生物 |
  74. +-----+-----+-----+-----+-----+
  75. |79   |76   |62   |62   |77   |
  76. +-----+-----+-----+-----+-----+
  77. |62   |75   |65   |71   |63   |
  78. +-----+-----+-----+-----+-----+
  79. |79   |77   |70   |77   |67   |
  80. +-----+-----+-----+-----+-----+
  81. |74   |75   |72   |61   |61   |
  82. +-----+-----+-----+-----+-----+
  83. |79   |64   |72   |62   |76   |
  84. +-----+-----+-----+-----+-----+
  85. |74   |64   |74   |78   |69   |
  86. +-----+-----+-----+-----+-----+
  87. |64   |70   |74   |75   |72   |
  88. +-----+-----+-----+-----+-----+
  89. |66   |63   |77   |75   |79   |
  90. +-----+-----+-----+-----+-----+
  91. |71   |63   |79   |60   |70   |
  92. +-----+-----+-----+-----+-----+
  93. +-----+-----+-----+-----+-----+
  94. |大到小化学                   |
  95. +-----+-----+-----+-----+-----+
  96. |语文 |数学 |英语 |化学 |生物 |
  97. +-----+-----+-----+-----+-----+
  98. |74   |64   |74   |78   |69   |
  99. +-----+-----+-----+-----+-----+
  100. |79   |77   |70   |77   |67   |
  101. +-----+-----+-----+-----+-----+
  102. |64   |70   |74   |75   |72   |
  103. +-----+-----+-----+-----+-----+
  104. |66   |63   |77   |75   |79   |
  105. +-----+-----+-----+-----+-----+
  106. |62   |75   |65   |71   |63   |
  107. +-----+-----+-----+-----+-----+
  108. |79   |64   |72   |62   |76   |
  109. +-----+-----+-----+-----+-----+
  110. |79   |76   |62   |62   |77   |
  111. +-----+-----+-----+-----+-----+
  112. |74   |75   |72   |61   |61   |
  113. +-----+-----+-----+-----+-----+
  114. |71   |63   |79   |60   |70   |
  115. +-----+-----+-----+-----+-----+
  116. +-----+-----+-----+-----+-----+
  117. |小到大生物                   |
  118. +-----+-----+-----+-----+-----+
  119. |语文 |数学 |英语 |化学 |生物 |
  120. +-----+-----+-----+-----+-----+
  121. |74   |75   |72   |61   |61   |
  122. +-----+-----+-----+-----+-----+
  123. |62   |75   |65   |71   |63   |
  124. +-----+-----+-----+-----+-----+
  125. |79   |77   |70   |77   |67   |
  126. +-----+-----+-----+-----+-----+
  127. |74   |64   |74   |78   |69   |
  128. +-----+-----+-----+-----+-----+
  129. |71   |63   |79   |60   |70   |
  130. +-----+-----+-----+-----+-----+
  131. |64   |70   |74   |75   |72   |
  132. +-----+-----+-----+-----+-----+
  133. |79   |64   |72   |62   |76   |
  134. +-----+-----+-----+-----+-----+
  135. |79   |76   |62   |62   |77   |
  136. +-----+-----+-----+-----+-----+
  137. |66   |63   |77   |75   |79   |
  138. +-----+-----+-----+-----+-----+
  139. 程序耗时:0.000000
复制代码

作者: Gin_Q    时间: 2020-2-24 19:53

本帖最后由 Gin_Q 于 2020-2-25 10:49 编辑

1W行1秒内没有问题的!(CPU型号 :Intel(R) Celeron(R) CPU G1840 @ 2.80GHz)
  1. +-----+-----+-----+-----+-----+
  2. |66   |63   |77   |75   |79   |
  3. +-----+-----+-----+-----+-----+
  4. |66   |63   |77   |75   |79   |
  5. +-----+-----+-----+-----+-----+
  6. |66   |63   |77   |75   |79   |
  7. +-----+-----+-----+-----+-----+
  8. |66   |63   |77   |75   |79   |
  9. +-----+-----+-----+-----+-----+
  10. |66   |63   |77   |75   |79   |
  11. +-----+-----+-----+-----+-----+
  12. |66   |63   |77   |75   |79   |
  13. +-----+-----+-----+-----+-----+
  14. 程序耗时:0.916000
复制代码

作者: Gin_Q    时间: 2020-2-28 11:43

本帖最后由 Gin_Q 于 2020-2-28 19:40 编辑

学到结构体!想到用于这个题目相当合适!!!
  1. #include <stdio.h>
  2. struct Student
  3. {
  4. int nu_1;
  5. int nu_2;
  6. int nu_3;
  7. int nu_4;
  8. int nu_5;
  9. };
  10. int main(void)
  11. {
  12. struct Student arr[9]={{79,77,70,77,67},{64,70,74,75,72},{79,64,72,62,76},{62,75,65,71,63},
  13. {79,76,62,62,77},{66,63,77,75,79},{74,75,72,61,61},{71,63,79,60,70},{74,64,74,78,69}};
  14. struct Student temp;
  15. const int n=9;
  16. int i,j;
  17. for (i=0;i<n-1;i++)
  18. {
  19. for (j=i+1;j<n;j++)
  20. {
  21. if (arr[i].nu_1>arr[j].nu_1)
  22. {
  23. temp=arr[i];arr[i]=arr[j];arr[j]=temp;
  24. }
  25. }
  26. }
  27. printf("语文 数学 英语 化学 生物\n");
  28. for (i=0;i<n;i++) printf("%-5d%-5d%-5d%-5d%-5d\n",arr[i].nu_1,arr[i].nu_2,arr[i].nu_3,arr[i].nu_4,arr[i].nu_5);
  29. return 0;
  30. }
复制代码
  1. 语文 数学 英语 化学 生物
  2. 62   75   65   71   63
  3. 64   70   74   75   72
  4. 66   63   77   75   79
  5. 71   63   79   60   70
  6. 74   75   72   61   61
  7. 74   64   74   78   69
  8. 79   77   70   77   67
  9. 79   76   62   62   77
  10. 79   64   72   62   76
  11. --------------------------------
  12. Process exited after 0.01317 seconds with return value 0
  13. 请按任意键继续. . .
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2