• 保研考研机试攻略:第二章——入门经典(2)


    🍦🍦🍦由于代码都是我自己敲出来调试的,所以可能不能一次更新那么多,大家见谅,不过因为我最近在备考机试,所以会拿出大量的时间在这上边,更新的会比较勤的~~~

    目录

    🧊🧊🧊2.4 日期类问题

    🥥题型总结:

    🥥例题:DreamJudge 1051

    🥥练习题目:

    DreamJudge 1011 日期

    DreamJudge 1290 日期差值

    DreamJudge 1410 打印日期

    DreamJudge 1437 日期类

    DreamJudge 1446 日期累加 🍰

    DreamJudge 1053 偷菜时间表

    🧊🧊🧊2.5 字符串类问题

    🥥题型总结:

    🥥例题:DreamJudge 1014

    🥥练习题目:

    DreamJudge 1012 字符移动

    DreamJudge 1292 字母统计

    DreamJudge 1240 首字母大写 🍰

    DreamJudge 1394 统计单词

    DreamJudge 1027 删除字符串 2🍰

    🧊🧊🧊2.6 排序类问题

    🥥例题:DreamJudge 1151

    🥥例题:DreamJudge 1010

    🥥特殊排序题:

    普通排序(适合n<=2000的情况):

    快速排序(适合n<=50W的情况):

    🥥练习题目:

    DreamJudge 1106 排序 2 🍰

    DreamJudge 1159 成绩排序 2.0

    DreamJudge 1217 国名排序

    DreamJudge 1227 日志排序 🍰

    DreamJudge 1248 整数奇偶排序

    DreamJudge 1254 字符串排序

    DreamJudge 1255 字符串排序 2

    DreamJudge 1261 字符串排序 3

    DreamJudge 1294 后缀子串排序

    DreamJudge 1310 奥运排序问题

    DreamJudge 1338 EXCEL 排序

    DreamJudge 1360 字符串内排序

    DreamJudge 1399 排序 - 华科

    DreamJudge 1400 特殊排序

    DreamJudge 1404 成绩排序 - 华科

    DreamJudge 1412 大整数排序

    DreamJudge 1817 成绩再次排序

    DreamJudge 1798 数组排序


    🧊🧊🧊2.4 日期类问题

    🥥题型总结:

    1. 判断某年 是否为闰年
    2. 某年某月某日是 星期几 变形:某日期到某 日期之间有多少天
    3. 某天之后 x 天 是几月几日
    4. 10:15 分之后 x 分钟 是几点几分 ( 变形:某点到 某点之间有多少分或多少秒

    特别注意闰年的判断,这些题目一般都是考察代码细节的把握,时间类的题目注意时间的转换,   1 天=24 小时,1 小时=60 分,1 分=60 秒。

    特别注意:一天之内时针和分针会重合 22 次,而不是 24 次。

    我们一般用scanf来进行输入,比较方便:

    1. int year, month, day;
    2. scanf("%d-%d-%d", &year, &month, &day);
    3. scanf("%d/%d/%d", &year, &month, &day);
    4. int hour, minute;
    5. scanf("%d:%d", &hour, &minute);

    🥥例题:DreamJudge 1051

    这个题目的考点在于:一个是每个月的天数都不一样,另一个是 2 月如果是闰年则多一天,最后我们还要判断输入的日期是否存在。

    1. #include
    2. using namespace std;
    3. struct node {
    4. int year,month,day;
    5. }p;
    6. int f[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    7. int main(){
    8. while(cin>>p.year>>p.month>>p.day){
    9. //判断是否闰年
    10. if((p.year%400==0)||(p.year%4==0)&&(p.year%100!=0)){
    11. f[2]=29;
    12. }
    13. else f[2]=28;
    14. int flag=0;
    15. //判断月份输入是否合法
    16. if(p.month<1||p.month>12) flag=1;
    17. //判断天的输入是否合法
    18. if(p.day<0||p.day>f[p.month]) flag=1;
    19. if(flag){
    20. cout<<"Input error!"<
    21. continue;
    22. }
    23. int ans=p.day;
    24. for(int i=1;i
    25. ans+=f[i];
    26. }
    27. cout<
    28. }
    29. return 0;
    30. }

    🥥练习题目:

    DreamJudge 1011 日期

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int month[15]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    6. string week[10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
    7. int m,d,days=0;
    8. cin>>m>>d;
    9. if(m==4) days=d-9+1;
    10. else
    11. {
    12. days=22+d;
    13. for(int i=5;i
    14. }
    15. days%=7;
    16. cout<
    17. return 0;
    18. }

    DreamJudge 1290 日期差值

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int month[20]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    6. int y1=0,y2=0,m1=0,m2=0,d1=0,d2=0;
    7. string s1,s2;
    8. cin>>s1>>s2;
    9. long long ans=0;
    10. for(int i=0;i<4;i++)
    11. {
    12. y1=y1*10+s1[i]-'0';
    13. y2=y2*10+s2[i]-'0';
    14. }
    15. for(int i=4;i<6;i++)
    16. {
    17. m1=m1*10+s1[i]-'0';
    18. m2=m2*10+s2[i]-'0';
    19. d1=d1*10+s1[i+2]-'0';
    20. d2=d2*10+s2[i+2]-'0';
    21. }
    22. //cout<
    23. //cout<
    24. if(y1==y2)
    25. {
    26. if(y1%400==0||(y1%4==0&&y1%100!=0)) month[2]=29;
    27. if(m1==m2) ans=abs(d2-d1)+1;
    28. else
    29. {
    30. ans+=month[m1]-d1+1;
    31. ans+=d2;
    32. for(int i=m1+1;i
    33. }
    34. }
    35. else
    36. {
    37. if(y1%400==0||(y1%4==0&&y1%100!=0)) month[2]=29;
    38. ans+=month[m1]-d1+1;
    39. for(int i=m1+1;i<=12;i++) ans+=month[i];
    40. month[2]=28;
    41. if(y2%400==0||(y2%4==0&&y2%100!=0)) month[2]=29;
    42. ans+=d2;
    43. for(int i=1;i
    44. for(int i=y1+1;i
    45. {
    46. if(i%400==0||(i%4==0&&i%100!=0)) ans+=366;
    47. else ans+=365;
    48. }
    49. }
    50. cout<
    51. return 0;
    52. }

    DreamJudge 1410 打印日期

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int month[20]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    6. int m,d;
    7. while(cin>>m>>d)
    8. {
    9. if(m%400==0||(m%4==0&&m%100!=0)) month[2]=29;
    10. int cnt=1;
    11. if(d<=month[1])
    12. {
    13. if(d<10) cout<"-01-0"<
    14. else cout<"-01-"<
    15. continue;
    16. }
    17. while(d>month[cnt])
    18. {
    19. d-=month[cnt];
    20. cnt++;
    21. }
    22. if(d<10&&cnt<10) cout<"-0"<"-0"<
    23. else if(d<10) cout<"-"<"-0"<
    24. else if(cnt<10) cout<"-0"<"-"<
    25. else cout<"-"<"-"<
    26. month[2]=28;
    27. }
    28. return 0;
    29. }

    DreamJudge 1437 日期类

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int month[20]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    6. int n,y,m,d;
    7. cin>>n;
    8. for(int i=0;i
    9. {
    10. cin>>y>>m>>d;
    11. if(d==month[m])
    12. {
    13. m++;
    14. d=1;
    15. }
    16. else d++;
    17. if(d<10&&m<10) cout<"-0"<"-0"<
    18. else if(d<10) cout<"-"<"-0"<
    19. else if(m<10) cout<"-0"<"-"<
    20. else cout<"-"<"-"<
    21. }
    22. return 0;
    23. }

    DreamJudge 1446 日期累加 🍰

    1. #include
    2. using namespace std;
    3. bool isLeap(int y){//判断闰年
    4. if(y%400==0||(y%4==0&&y%100!=0)) return true;
    5. return false;
    6. }
    7. int month[20] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    8. int main()
    9. {
    10. int n;
    11. cin>>n;
    12. for(int i=0;i
    13. {
    14. int y, m, d;
    15. long long days;
    16. cin>>y>>m>>d>>days;
    17. if(isLeap(y)) month[2]=29;
    18. else month[2]=28;
    19. while(days--)
    20. {
    21. d++;
    22. if(d>month[m])
    23. {
    24. d=1;
    25. m++;
    26. if(m>12)
    27. {
    28. m=1;
    29. y++;//年数增加后,需要判断是不是闰年
    30. if(isLeap(y)) month[2]=29;
    31. else month[2]=28;
    32. }
    33. }
    34. }
    35. printf("%4d-%02d-%02d\n",y,m,d);
    36. }
    37. return 0;
    38. }

    DreamJudge 1053 偷菜时间表

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int n,h,m;
    6. cin>>n;
    7. for(int i=0;i
    8. {
    9. int nh=13,nm=15;
    10. scanf("%d:%d",&h,&m);
    11. int mins=60*h+m;
    12. //cout<
    13. while(mins--)
    14. {
    15. nm++;
    16. if(nm>60)
    17. {
    18. nm=1;
    19. nh++;
    20. if(nh>24) nh=1;
    21. }
    22. }
    23. cout<":"<
    24. }
    25. return 0;
    26. }

    🧊🧊🧊2.5 字符串类问题

    🥥题型总结:

    1. 统计字符个数
    2. 单词首字母大写
    3. 统计子串出现次数(考察基础的字符串遍历能力)
    4. 文本加密/解密通过循环后移 x 位或直接给一个映射表是比较常见的考法)
    5. 文本中的单词反序灵活使用 string 可秒杀,当然也可以用字符串一步步解析)
    6. 删除字符串(大小写模糊)如果大小写不模糊,那么就是直接找到之后删除。大小写模糊的话,只是多一个判断)

    🥥例题:DreamJudge 1014

    往后移动 3 位是这道题的核心,这道题目就是“移位加密”,我们需要将大写、小写字母、和其他数字等分开处理。

    1. #include
    2. #include
    3. int main() {
    4. char s[105];
    5. gets(s);//输入一行文本用 gets
    6. int len=strlen(s);
    7. for(int i=0;i
    8. if(s[i]>='A'&&s[i]<='Z'){
    9. s[i]+=3;
    10. if(s[i]>'Z') s[i]-=26;//溢出循环
    11. }
    12. else if(s[i]>='a'&&s[i]<='z'){
    13. s[i]+=3;
    14. if(s[i]>'z') s[i]-=26;//溢出循环
    15. }
    16. else {
    17. continue;
    18. }
    19. }
    20. puts(s);
    21. return 0;
    22. }

    🥥练习题目:

    DreamJudge 1012 字符移动

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. string s,num="",let="";
    6. cin>>s;
    7. for(int i=0;isize();i++)
    8. {
    9. if(s[i]>='0'&&s[i]<='9') num+=s[i];
    10. else let+=s[i];
    11. }
    12. let+=num;
    13. cout<
    14. return 0;
    15. }

    DreamJudge 1292 字母统计

    输入:DFJEIWFNQLEF0395823048+_+JDLSFJDLSJFKK

    输出:

    A:0
    B:0
    C:0
    D:3
    E:2
    F:5
    G:0
    H:0
    I:1
    J:4
    K:2
    L:3
    M:0
    N:1
    O:0
    P:0
    Q:1
    R:0
    S:2
    T:0
    U:0
    V:0
    W:1
    X:0
    Y:0
    Z:0
    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. string s;
    6. int a[30]={0};
    7. cin>>s;
    8. for(int i=0;isize();i++)
    9. {
    10. if(s[i]>='A'&&s[i]<='Z') a[(s[i]-'A')]+=1;
    11. else continue;
    12. }
    13. char letter;
    14. for(int i=0;i<26;i++)
    15. {
    16. letter=i+'A';
    17. cout<":"<
    18. }
    19. return 0;
    20. }

    DreamJudge 1240 首字母大写 🍰

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. string s;
    6. while(getline(cin,s))
    7. {
    8. if(s[0]>='a'&&s[0]<='z') s[0]-=32;
    9. for(int i=1;isize();i++)
    10. {
    11. if(s[i]==' '||s[i]=='\t'||s[i]=='\n'||s[i]=='\r')
    12. {
    13. if(s[i+1]>='a'&&s[i+1]<='z') s[i+1]-=32;
    14. }
    15. }
    16. cout<
    17. }
    18. return 0;
    19. }

    DreamJudge 1394 统计单词

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. string s;
    6. while(getline(cin,s))
    7. {
    8. int cnt=0;
    9. for(int i=0;isize();i++)
    10. {
    11. if(s[i]!=' '&&s[i+1]==' ')
    12. {
    13. cnt++;
    14. cout<" ";
    15. cnt=0;
    16. }
    17. else if(s[i]!=' '&&s[i+1]=='.')
    18. {
    19. cnt++;
    20. cout<
    21. break;
    22. }
    23. else if(s[i]!=' ') cnt++;
    24. else continue;
    25. }
    26. }
    27. return 0;
    28. }

    DreamJudge 1027 删除字符串 2🍰

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. string s;
    6. cin>>s;
    7. for(int i=0;isize();i++)
    8. {
    9. if((s[i]=='g'||s[i]=='G')&&(s[i+1]=='z'||s[i+1]=='Z')&&(s[i+2]=='u'||s[i+2]=='U'))
    10. {
    11. i+=2;
    12. continue;
    13. }
    14. cout<
    15. }
    16. return 0;
    17. }

    🧊🧊🧊2.6 排序类问题

    时间复杂度为O(NlogN)

    排序类问题就用 sort 函数,sort本质上也是封装了快速排序,同时还做了一些优化。 sort 可以对最大 30W 个左右的元素进行排序,可以应对考研机试中的 99.9%的情况。

    sort常见应用场景:

    • 自定义函数排序
    • 多级排序

    🥥例题:DreamJudge 1151

    这题唯一的一个考点在于稳定排序sort 排序是不稳定的,排序之后相对次序有可能发生改变。解决这个问题有两个方法,一个是用 stable_sort 函数,它的用法和 sort 一样,但是它是稳定的,所以如果我们遇到有稳定的需求的排序时,可以用它。另一个方法是给每一个输入增加一个递增的下标,然后二级排序,当值相同时,下标小的排在前面。

    使用stable_sort函数:

    1. #include
    2. using namespace std;
    3. struct Student {
    4. string name;
    5. int grade;
    6. }stu[1005];
    7. //从大到小排序
    8. bool compareDesc(Student a,Student b) {
    9. return a.grade > b.grade;
    10. }
    11. //从小到大排序
    12. bool compareAsc(Student a,Student b) {
    13. return a.grade < b.grade;
    14. }
    15. int main() {
    16. int n,order;
    17. while(cin>>n) {
    18. cin>>order;
    19. for(int i=0;i
    20. cin>>stu[i].name>>stu[i].grade;
    21. }
    22. if(order==0)
    23. stable_sort(stu,stu+n,compareDesc);
    24. else
    25. stable_sort(stu,stu+n,compareAsc);
    26. for(int i=0;i
    27. cout<" "<
    28. }
    29. }
    30. return 0;
    31. }

    使用下标id:

    1. #include
    2. using namespace std;
    3. struct Student {
    4. string name;
    5. int grade, id;
    6. }stu[1005];
    7. //从大到小排序
    8. bool compareDesc(Student a,Student b) {
    9. if (a.grade == b.grade) return a.id < b.id;
    10. return a.grade > b.grade;
    11. }
    12. //从小到大排序
    13. bool compareAsc(Student a,Student b) {
    14. if (a.grade == b.grade) return a.id < b.id;
    15. return a.grade < b.grade;
    16. }
    17. int main() {
    18. int n,order;
    19. while(cin>>n) {
    20. cin>>order;
    21. for(int i=0;i
    22. cin>>stu[i].name>>stu[i].grade;
    23. stu[i].id = i;//通过标记 ID 进行判断
    24. }
    25. if(order==0)
    26. sort(stu,stu+n,compareDesc);
    27. else
    28. sort(stu,stu+n,compareAsc);
    29. for(int i=0;i
    30. cout<" "<
    31. }
    32. }
    33. return 0;
    34. }

    🥥例题:DreamJudge 1010

    题目要求:按“奇数在前,偶数在后”的排序方法,同为奇数或同为偶数再从小到大排序。有两种方法解决这个问题:第一个是将奇偶数分开,分别排好序,再合并在一起。第二个是使用 sort 进行二级排序,这里给出第二种方法的代码

    1. #include
    2. using namespace std;
    3. bool cmp(int a,int b){
    4. if(a % 2 == b % 2)//如果同奇同偶
    5. return a < b;//直接从小到大排序
    6. else//如果奇偶性不同
    7. return (a%2) > (b%2);//奇数在偶数前
    8. }
    9. int main() {
    10. int n;
    11. int a[1005] = {0};
    12. cin >> n;
    13. for (int i = 0; i < n; i++) {
    14. cin >> a[i];
    15. }
    16. sort(a, a+n, cmp);
    17. for(int i = 0; i < n; i++) {
    18. cout << a[i] << " ";
    19. }
    20. cout << endl;
    21. return 0;
    22. }

    🥥特殊排序题:

    1. 如果题目给的数据量很大,上百万的数据要排序,但是值的区间范围很小,比如值最大只有 10 万,或者值的范围在 1000W 到 1010W 之间,对于这种情况,我们可以采用空间换时间的计数排序。
    2. 字符串的字典序排序是一个常见的问题,需要掌握,也是用 sort。下面两种情况了解即可,追求满分的同学需要掌握
    3. 如果题目给你一个数的序列,要你求逆序数对有多少,这是一个经典的问题,解法是在归并排序合并是进行统计,复杂度可以达到 nlogn。如果数据量小,直接冒泡排序即可。
    4. 如果题目让你求 top10,即最大或最小的 10 个数,如果数据量很大,建议使用选择排序,也就是一个一个找,这样复杂度比全部元素排序要低。
    5. 如果题目给的数据量有几百万,让你从中找出第 K 大的元素,这时候 sort 是会超时的。解法是利用快速排序的划分的性质,进入到其中一个分支继续寻找,

    这些题目都是数据量很大且数据很特殊的题目,给出c语言模板:

    普通排序(适合n<=2000的情况):

    1. #include
    2. const int maxn = 1005;
    3. int a[maxn];
    4. int main() {
    5. int n;
    6. scanf("%d", &n);
    7. for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    8. for (int i = 1; i <= n; i++) {//两个 for 都是 1 到 n 方便好记
    9. for (int j = 1; j < n ;j++) {
    10. if (a[j] > a[j + 1]) {//交换 a[j]和 a[j+1]
    11. int temp = a[j];
    12. a[j] = a[j+1];
    13. a[j+1] = temp;
    14. }
    15. }
    16. }
    17. for (int i = 1; i <= n; i++) {
    18. printf("%d ", a[i]);
    19. }
    20. printf("\n");
    21. return 0;
    22. }

    快速排序(适合n<=50W的情况):

    1. #include
    2. const int maxn = 100005;
    3. int a[maxn];
    4. //快速排序
    5. void Quick_Sort(int l, int r) {
    6. if(l >= r) return;
    7. int i = l,j = r,x = a[l];
    8. while (i < j) {
    9. while (i < j && a[j] >= x) j--;
    10. if (i < j) a[i++] = a[j];
    11. while (i < j && a[i] < x) i++;
    12. if (i < j) a[j--] = a[i];
    13. }
    14. a[i] = x;
    15. Quick_Sort(l, i - 1);
    16. Quick_Sort(i + 1, r);
    17. }
    18. int main() {
    19. int n;
    20. scanf("%d", &n);
    21. for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    22. Quick_Sort(1, n);//传入左边界下标和右边界下标
    23. for (int i = 1; i <= n; i++) {
    24. printf("%d ", a[i]);
    25. }
    26. printf("\n");
    27. return 0;
    28. }

    🥥练习题目:

    DreamJudge 1106 排序 2 🍰

     输入:

    10
    50 36 41 19 23 4 20 18 12 22

    输出:

    4 12 18 19 20 22 23 36 41 50
    4 20 18 12 22 50 36 41 19 23
    4 12 18 19 20 22 23 36 41 50
    4 12 18 19 20 22 23 36 41 50
    36 50 19 41 4 23 18 20 12 22
    1. #include
    2. #define STEP 5
    3. using namespace std;
    4. int d[1024], t[1024];
    5. void insertSort(const int &n){//插入排序
    6. for(int i=1;i
    7. int j=i;
    8. while(j>=1&&d[j]-1]){
    9. swap(d[j],d[j-1]);
    10. j--;
    11. }
    12. }
    13. return;
    14. }
    15. void shellSort(const int &n){//希尔排序
    16. for(int i=0; i
    17. for(int j=i;j
    18. for(int k=j+STEP;k
    19. if(d[k]
    20. swap(d[k],d[k-STEP]);
    21. }
    22. }
    23. }
    24. }
    25. return;
    26. }
    27. void selectSort(const int &n){//选择排序
    28. for(int i=0;i-1;i++){
    29. int minPos=i;
    30. for(int j=i+1;j
    31. if(d[j]
    32. minPos=j;
    33. }
    34. }
    35. swap(d[i],d[minPos]);
    36. }
    37. return;
    38. }
    39. int quickSort(const int &from, const int &to){//快速排序
    40. if(from>=to){
    41. return from;
    42. }
    43. int l=from,r=to;
    44. int pivot=d[l];
    45. while(l
    46. while(l=pivot){
    47. r--;
    48. }
    49. if(l
    50. d[l]=d[r];
    51. }
    52. while(l
    53. l++;
    54. }
    55. if(l
    56. d[r]=d[l];
    57. }
    58. }
    59. d[l]=pivot;
    60. quickSort(from,l-1);
    61. quickSort(l+1,to);
    62. return l;
    63. }
    64. void mergeSort(const int &n){//二路归并排序
    65. for(int i=0;i2){
    66. if(i+1d[i+1]){
    67. swap(d[i],d[i+1]);
    68. }
    69. }
    70. return;
    71. }
    72. void rebuild(const int &n){//用于重置数据序列
    73. for(int i=0;i
    74. d[i]=t[i];
    75. }
    76. return;
    77. }
    78. void show(const int &n){//用于输出排好序的数据序列
    79. if(0==n){
    80. return;
    81. }
    82. printf("%d",d[0]);
    83. for(int i=1;i
    84. cout<<" "<
    85. }
    86. cout<
    87. return;
    88. }
    89. int main(){
    90. int n;
    91. while(cin>>n){
    92. for(int i=0;i
    93. cin>>t[i];
    94. }
    95. rebuild(n);
    96. insertSort(n);
    97. show(n);
    98. rebuild(n);
    99. shellSort(n);
    100. show(n);
    101. rebuild(n);
    102. selectSort(n);
    103. show(n);
    104. rebuild(n);
    105. quickSort(0, n - 1);
    106. show(n);
    107. rebuild(n);
    108. mergeSort(n);
    109. show(n);
    110. rebuild(n);
    111. }
    112. return 0;
    113. }

    DreamJudge 1159 成绩排序 2.0

    1. #include
    2. using namespace std;
    3. struct student
    4. {
    5. int id,score;
    6. };
    7. bool cmp(student a,student b)
    8. {
    9. if(a.score==b.score) return a.id
    10. return a.score
    11. }
    12. int main()
    13. {
    14. int n;
    15. cin>>n;
    16. student a[200];
    17. for(int i=0;i>a[i].id>>a[i].score;
    18. sort(a,a+n,cmp);
    19. for(int i=0;i" "<
    20. return 0;
    21. }

    DreamJudge 1217 国名排序

    sort可以直接对string排序

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int n;
    6. string s;
    7. vector a;
    8. while(cin>>n)
    9. {
    10. a.clear();
    11. for(int i=0;i
    12. {
    13. cin>>s;
    14. a.push_back(s);
    15. }
    16. sort(a.begin(),a.end());
    17. for(int i=0;i
    18. }
    19. return 0;
    20. }

    DreamJudge 1227 日志排序 🍰

    stod函数:将string类型的字符串转换为double类型的浮点数,会自动忽略字符串开头的空白字符

    1. #include
    2. using namespace std;
    3. struct T{
    4. string name;
    5. string data;
    6. double run;
    7. };
    8. bool cmp(T x,T y){
    9. if(x.run==y.run)return x.data
    10. else return x.run
    11. }
    12. int main(){
    13. string temp;
    14. T t[10000];
    15. int cnt=0;
    16. while(getline(cin,temp)){
    17. if(temp=="")break;
    18. t[cnt].name=temp;
    19. t[cnt].data=temp.substr(13,23);
    20. t[cnt].run=stod(temp.substr(36,12));//stod函数:将string类型的字符串转换为double类型的浮点数,会自动忽略字符串开头的空白字符
    21. cnt++;
    22. }
    23. sort(t,t+cnt,cmp);
    24. for(int i=0;i
    25. return 0;
    26. }

    DreamJudge 1248 整数奇偶排序

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int a[20];
    6. vector<int> ji,ou;
    7. while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8]>>a[9])
    8. {
    9. for(int i=0;i<10;i++)
    10. {
    11. if(a[i]%2==0) ou.push_back(a[i]);
    12. else ji.push_back(a[i]);
    13. }
    14. sort(ou.begin(),ou.end());
    15. sort(ji.begin(),ji.end(),greater<int>());
    16. for(int i=0;isize();i++) cout<" ";
    17. for(int i=0;isize();i++) cout<" ";
    18. cout<
    19. }
    20. return 0;
    21. }

    DreamJudge 1254 字符串排序

    DreamJudge 1255 字符串排序 2

    DreamJudge 1261 字符串排序 3

    DreamJudge 1294 后缀子串排序

    DreamJudge 1310 奥运排序问题

    DreamJudge 1338 EXCEL 排序

    DreamJudge 1360 字符串内排序

    DreamJudge 1399 排序 - 华科

    DreamJudge 1400 特殊排序

    DreamJudge 1404 成绩排序 - 华科

    DreamJudge 1412 大整数排序

    DreamJudge 1817 成绩再次排序

    DreamJudge 1798 数组排序

    创作不易,点个赞吧~点赞收藏不迷路,感兴趣的宝子们欢迎关注该专栏~

    这部分的练习题特别多,我后边会尽快补齐的,做完我就更新啦,大家可以先自己练习着~

    勤奋努力的宝子们,学习辛苦了!🌷🌷🌷休息下,我们下部分再见👋( •̀ ω •́ )✧~

  • 相关阅读:
    Tang Capital宣布收购纳斯达克上市公司Rain Oncology100%股权
    电商数据|电商API接口|电商数据分析都会用到的接口不用再找了
    【EtherCAT】二、下载并使用TwinCAT
    在中国 ToB 市场,选一个对的供应商太难了
    【LeetCode每日一题】——37.解数独
    使用Cpolar+freekan源码 创建在线视频网站
    Red Hat Enterprise Linux (RHEL) 9 更新了哪些新特性?
    基于ARM的字符串拷贝实验(嵌入式系统)
    C++ Reference: Standard C++ Library reference: C Library: cwctype: iswdigit
    智能交通和自动驾驶技术
  • 原文地址:https://blog.csdn.net/qq_63349644/article/details/141032923