【题目链接】

ybt 2048:【例5.18】串排序

【题目考点】

1. 多字符串处理

  • 方法1:string类对象数组
    设string类对象数组s,s[i]保存第i个字符串。s[i]是string类对象。
string s[105];//s[i]保存第i个字符串
int n;
cin >> n;
for(int i = 1; i <= n; ++i)cin >> s[i];
  • 方法2:二维数组
    设二维数组s,s[i]保存第i个字符串。s[i]是char*类型指针常量,是一维字符数组。缺点是指针不可改变。
    例:输入n,输入n个字符串
char s[105][105];//s[i]保存第i个字符串
int n;
cin >> n;
for(int i = 1; i <= n; ++i)cin >> s[i];
  • 方法3:指针数组
    设指针数组s,s[i]保存第i个字符串。s[i]是char*类型指针变量,指向一维字符数组。
    使用前需要动态申请内存空间。优点是指针值可以改变。
char *s[105];//s[i]保存第i个字符串
int n;
cin >> n;
for(int i = 1; i <= n; ++i)
{s[i] = new int[105];//申请完记得释放cin >> s[i];
}

2. 排序

本题考查重点不是排序,随便选一种基本排序方法就好,或者用sort函数进行排序。
sort函数使用可以读者自行搜索。这里不做过多介绍。

3. 字符串比较

基于字典序比较:遍历两个字符串,对应位置字符进行比较

  • 如果发现字符不同,哪个字符的ASCII码大,那个字符所在的字符串就更大
  • 如果字符相同,看下一个字符
  • 如果一个字符串遍历完了,另一个字符串没遍历完,那么更长的字符串更大。
  • 如果两个字符串同时遍历完,那么两字符串相同

字符数组比较:strcmp(s1, s2),其中s1, s2是字符数组

  • 如果s1比s2小,即s1字典序在s2前,返回 -1
  • 如果s1比s2大,即s1字典序在s2后面,返回1
  • 如果s1与s2相同,返回0

string类对象比较:>, <, >=, <=, ==, !=
string类对象重载了各种关系运算符,可以用关系运算符直接比较

【解题思路】

存储结构可以选择:string类数组,指针数组,二维数组
排序方法可以有多种选择,大体分为:手写排序、调用stl排序函数(如sort函数)
以下给出几种方法示例

【题解代码】

解法1:string类+sort函数

#include<bits/stdc++.h>
using namespace std;
int main()
{string s[25];//string类数组 int n;cin >> n;for(int i = 1; i <= n; ++i)cin >> s[i];sort(s+1, s+1+n);//默认升序 比较时使用string类重载的<运算符 for(int i = 1; i <= n; ++i)cout << s[i] << endl;return 0;
}

解法2:string类数组+选择排序

#include<bits/stdc++.h>
using namespace std;
int main()
{string s[25];int n;cin >> n;for(int i = 1; i <= n; ++i)cin >> s[i];for(int i = 1; i <= n - 1; ++i)//选择排序{int m = i;//找从i+1~n最小值下标 for(int j = i + 1; j <= n; ++j){if(s[j] < s[m])m = j;}swap(s[m], s[i]);}for(int i = 1; i <= n; ++i)cout << s[i] << endl;return 0;
}

解法3:指针数组+冒泡排序

#include<bits/stdc++.h>
using namespace std;
int main()
{char *s[25];//指针数组 int n;cin >> n;for(int i = 1; i <= n; ++i){s[i] = new char[25];//动态内存申请 cin >> s[i];}for(int i = 1; i <= n-1; ++i)for(int j = 1; j <= n-i; ++j){if(strcmp(s[j], s[j+1]) > 0)//或写为==1 swap(s[j], s[j+1]);//s[j]和s[j+1]是char*类型指针变量,可以交换    }for(int i = 1; i <= n; ++i){cout << s[i] << endl; delete s[i];//动态申请的内存要释放,虽然程序运行完了也能释放,但要养成这种手动释放的习惯。以防工作后写出使内存泄露的程序。 }return 0;
}

解法4:二维数组+索引数组+插入排序

#include<bits/stdc++.h>
using namespace std;
int main()
{char s[25][25]; int n, ind[25];//s[ind[i]]:索引数组,排序后第i个元素 cin >> n;for(int i = 1; i <= n; ++i){cin >> s[i];ind[i] = i;}for(int i = 2; i <= n; ++i)//把第几个元素插入有序序列 for(int j = i; j >= 2; --j){if(strcmp(s[ind[j]], s[ind[j-1]]) < 0)//排序后数组第j元素小于排序后第j-1元素 swap(ind[j], ind[j-1]);elsebreak;}for(int i = 1; i <= n; ++i)cout << s[ind[i]] << endl;return 0;
}

信息学奥赛一本通 2048:【例5.18】串排序相关推荐

  1. 信息学奥赛一本通(1181:整数奇偶排序)——快速排序

    1181:整数奇偶排序 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 13733     通过数: 8879 [题目描述] 给定10个整数的序列,要求对其重新排序 ...

  2. 信息学奥赛一本通C++语言-----2048:【例5.18】串排序

    [题目描述] 对给定的n(1≤n≤20)n(1≤n≤20)个国家名(国家名字长度不超过2020),按其字母的顺序输出. [输入] 第一行为国家的个数nn: 以下nn行为国家的名字. [输出] nn行, ...

  3. 信息学奥赛一本通(2032:【例4.18】分解质因数)

    2032:[例4.18]分解质因数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 582     通过数: 376 [题目描述] 把一个合数分解成若干个质因数乘积 ...

  4. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02

    /* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...

  5. 【例8】合唱队形(《信息学奥赛一本通第五版》)

    /* [例8]合唱队形(<信息学奥赛一本通第五版>) http://ybt.ssoier.cn:8088/problem_show.php?pid=1264 [问题描述] N位同学站成一排 ...

  6. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  7. 信息学奥赛一本通——2062:【例1.3】电影票

    2062:[例1.3]电影票 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 57341     通过数: 34230 [题目描述] 已知一位小朋友的电影票价是10 ...

  8. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  9. 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)

    [题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...

最新文章

  1. Xamarin图表开发基础教程(6)OxyPlot框架
  2. 使用模板将Web服务的结果转换为标记语言
  3. Matlab画图-非常具体,非常全面
  4. 决定把BLOG的文章从CU上同步过来
  5. ajaxfileupload 返回值_ajaxFileUpload上传文件返回json无法解析
  6. 理论基础 —— 索引 —— B 树、B+ 树与 B* 树
  7. mybatis-plus实现自动填充数据如:数据库中createTime和updateTime
  8. 将python源文件打包成exe文件
  9. springboot使用thymeleaf完成数据的页面展示
  10. 如何组织软件模块的代码结构?
  11. Java:项目启动报错java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
  12. python控制系统仿真_MATLABSimulink与控制系统仿真(第3版)
  13. ADS(Advanced Design system)原理图结合板层结构仿真(MSub)及版图仿真(EM Simulation)
  14. php自动生成模板文件,Laravel学习笔记之Artisan命令生成自定义模板的方法
  15. gyb优化事项(1)
  16. 深度学习提高模型准确率方法
  17. JavaScript:Promise进阶知识
  18. 智能过滤系统 西门子200smart与昆仑通态触摸屏做的自动过滤系统
  19. html中测试心理测试的代码,趣味心理测试源码、心理测试_心理测评微信小程序版...
  20. jenkins 使用过程问题解决方法

热门文章

  1. 如何从OnDocumentComplete事件中获得当前frame的html代码
  2. 计算机陕西高校保研排名,陕西18所大学2021届保研率排行榜
  3. java实现文件上传下载功能,javaweb文件的下载和上传功能的实现
  4. 天画-codeMaker组件化架构升级实践
  5. Mobvista首席架构师蔡超:工作感悟之失败与成功,我的8点总结
  6. JWTToken超时刷新策略
  7. 在window打包war
  8. 【视频教程】JEECG 入门视频教程大全+历史版本代码下载
  9. 通过Java得到的时间与操作系统时间不一致,如何修改Java虚拟机时间?
  10. RE正则表达式与grep