版权声明:侵删 [email protected] https://blog.csdn.net/weixin_43350051/article/details/85029056
问题 D: 单词排序(点击)
时间限制: 1 Sec 内存限制: 128 MB
提交: 448 解决: 155
[提交] [状态] [讨论版] [命题人:admin]
题目描述
小红学会了很多英语单词,妈妈为了帮小红加强记忆,拿出纸、笔,把n个单词写在纸上的一行里,让小红看几秒钟后,将这张纸扣在桌子上。妈妈问小红:你能否将这些n个单词按照字典排列的顺序,从小到大写出来?小红按照妈妈的要求写出了答案。现在请你编写程序帮助妈妈检查小红的答案是否正确。注意:所有单词都由小写字母组成,开头字母全都不同,单词两两之间用一个空格分隔。
输入
有两行:第一行仅包含一个正整数n(0<n<27)第二行包含n个单词,表示妈妈写出的单词,两两之间用一个空格分隔。
单个单词长度不超过10。
输出
仅有一行:针对妈妈写出的单词,按照字典排列的顺序从小到大排成一行的结果,单词两两之间用一个空格分隔。
样例输入
复制样例数据
4
city boy tree student
样例输出
boy city student tree
思路:
开始把这个问题想复杂了没注意到所有单词开头都不同 但正因为想复杂了 让我想到了曾经问过学长的strcmp函数(字典序比较)
加上冒泡就把这个问题解决了。
代码:
#include<stdio.h>
#include<string.h> //要加上字符串函数头文件
int main()
{
int n,i,j;
char a[35][15],temp[15]; //数组别开那麽大 刚才同学就是因为开大了总是错误
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",a[i]); //使用二维数组会更方便 不然长度确实是不好确定
}
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){ //冒泡+strcmp函数+strcpy函数的完美组合(还没试结构体排序)
if(strcmp(a[j],a[j+1])>0){
strcpy(temp,a[j]);
strcpy(a[j],a[j+1]); //函数中出现的都是地址 千万不要把整个数组放进去
strcpy(a[j+1],temp);
}
}
}
for(i=0;i<n;i++){
printf(i==n-1?"%s\n":"%s ",a[i]); //输出保证最后一位后面没有空格
}
return 0;
}