PAT A1083!

网上的博客贴实在毫无灵魂,这道题第三个测试点如果最后一行输出完后,如果不多输出一个换行,就会被判格式错误。这样一个明显令人无语的判定竟然没人吐槽更让人无语。

前景提要:目前刷的40多道PATA题中有多行输出的大部分会有一句要求,即最后一行后面不得有多余的换行,而没有这句话的除这题外,避免输出这个多余的换行都能顺利通过,于是只在多行输出中间加换行,而最后一行输出结束后不输出换行,是我应该也是其他人的惯常做法。

顺便贴一下我的代码,比网上看到的几个其他人的做法要好。他们的做法大同小异,都是把数据记录在一个无序的结构体数组中,排序,轮询判断输出。时间复杂度是n + nlogn + n,而我的做法是直接将对应name和id记在以grade为下标的结构体数组中,第二步便可轮询指定区间输出,时间复杂度为n + n。

 1 #define _CRT_SECURE_NO_WARNINGS
 2 
 3 #include <cstdio>
 4 #include <string>
 5 #include <iostream>
 6 using namespace std;
 7 
 8 struct Grade {
 9     string name;
10     string id;
11     bool flag;
12     Grade()
13     {
14         flag = false;    //true时被使用
15     }
16 }grade[105];
17 
18 int main()
19 {
20     int n;
21     int grade1, grade2;
22     bool exist = false;
23     scanf("%d", &n);
24 for (int i = 0; i < n; i++) 25 { 26 int tempG; 27 string tempN, tempId; 28 cin >> tempN >> tempId; 29 scanf("%d", &tempG); 30 grade[tempG].flag = true; 31 grade[tempG].id = tempId; 32 grade[tempG].name = tempN; 33 }
34 scanf("%d%d", &grade1, &grade2);
35 for (int g = grade2; g >= grade1; g--) 36 { 37 if (grade[g].flag == true) 38 { 39 //if (g < grade2) printf(" "); 40 exist = true; 41 cout << grade[g].name << " " << grade[g].id << endl; 42 } 43 }
44 if (exist == false) printf("NONE"); 45 46 return 0; 47 }
原文地址:https://www.cnblogs.com/shooting-gamer/p/13538900.html