OpenJudge计算概论-单词排序

简介: /*===================================== 单词排序 总时间限制:1000ms 内存限制: 65536kB 描述 输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字母顺序输出这些单词(即按照字符串中字母的ASCII码排序,区分大小写,当首字母相同时,比较第2个字母,依次类推),要求重复的单词只输出一次。
/*=====================================
单词排序
总时间限制:1000ms     内存限制: 65536kB
描述
    输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字母顺序输出这些单词(即按照字符串中字母的ASCII码排序,区分大小写,当首字母相同时,比较第2个字母,依次类推),要求重复的单词只输出一次。
输入
    一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。
输出
    按字母顺序输出这些单词,重复的单词只输出一次。
样例输入
    She  wants  to go to Peking University to study  Chinese
样例输出
    Chinese
    Peking
    She
    University
    go
    study
    to
    wants

思路:
依次输入单词,用scanf函数即可。
每次输入一个单词后立即检查前面输入的所有单词当中是否含有该新出现的单词。若是没有则把它存到数组当中,否则忽略该新输入的单词。
输入所有单词后,对数组排序,排序时比较两个单词的方法用strcmp进行。
拍好序后输出所有单词即可。 ======================================
*/
 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     int i,k;
 6     char a[100][50],temp[50];
 7     int n;
 8     int flag,j;
 9     freopen("5.in","r",stdin);
10     k=0;//表示现在为止已经往a数组放了k个单词 
11     while(scanf("%s",temp)!=EOF)
12     {
13         flag=1;//flag==1表示a数组没含有刚输入的单词temp[] 
14         for(i=0;i<k;i++)//检查a数组是否含有刚刚输入的单词temp[] 
15         {
16             if(strcmp(a[i],temp)==0)
17             {
18                 flag=0;//flag==0表示刚输入的单词temp[]已经包含在数组a里面 
19                 break;
20             }
21         }
22         if(flag==1)
23         {
24             strcpy(a[k],temp);
25             k++;
26         }
27     }
28     //下面是对数组a做选择排序
29     n=k;
30     for(i=0;i<n-1;i++)
31     {
32         k=i;
33         for(j=i+1;j<n;j++) //寻找a[i+1]~a[n-1]当中最小的元素并把它的下标记录到k里面。
34             if(strcmp(a[j],a[k])<0)//if(a[j] < a[k])
35                 k=j;
36         if(i!=k)
37         {
38             strcpy(temp,a[k]);
39             strcpy(a[k],a[i]);
40             strcpy(a[i],temp);
41         }
42     }
43     //下面输出排好序的a数组 
44     for(i=0;i<n;i++)
45     {
46         printf("%s\n",a[i]);
47     }
48     return 0;
49 }

 

相关文章
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
【基础算法】浅浅刷个小题 # 找不同 # 字符串中的单词数 # 重新排列字符串 #
【基础算法】浅浅刷个小题 # 找不同 # 字符串中的单词数 # 重新排列字符串 #
Openjudge计算概论-单词翻转
/*===================================== 单词翻转 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个句子(一行),将句子中的每一个单词翻转后输出 输入 只有一行,为一个字符串,不超过500个字符。
842 0
|
存储 Java
Openjudge计算概论-DNA排序
/*===================================== DNA排序 总时间限制: 1000ms 内存限制: 65536kB 描述 给出一系列基因序列,由A,C,G,T四种字符组成。
993 0
|
人工智能 算法
OpenJudge计算概论-字符串排序
/*====================================================================== 字符串排序 总时间限制: 1000ms 内存限制: 65536kB 描述 参考整数排序方法,设计一种为字符串排序的算法,将字符串从小到大输出 输入 第一行为测试数据组数t, 后面跟着t组数据。
823 0
|
JavaScript Windows
OpenJudge计算概论-单词替换
/*====================================================================== 单词替换 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个字符串,以回车结束(字符串长度
798 0
|
存储 人工智能
OpenJudge计算概论-单词倒排【把句子内单词的顺序翻转】
/*================================================== 单词倒排 总时间限制: 1000ms 内存限制: 65536kB 描述 编写程序,读入一段英文(英文中不包含标点), 将所有单词的顺序倒排并输出,其中单词以空格分隔。
1061 0
OpenJudge计算概论-字符串最大跨距
/*====================================================================== 字符串最大跨距 总时间限制: 1000ms 内存限制: 65536kB 描述 有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10,想检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在 S中互不交叉(即,S1的右边界点在S2的左边界点的左侧)。
1366 0
|
CDN
OpenJudge就算概论-统计字符数
/*===================================== 统计字符数 总时间限制: 1000ms 内存限制: 65536kB 描述 判断一个由a-z这26个字符组成的字符串中哪个字符出现的次数最多 输入 第1行是测试数据的组数n,每组测试数据占1行,是一个由a-z这26个字符组成的字符串 每组测试数据之间有一个空行,每行数据不超过1000个字符且非空 输出 n行,每行输出对应一个输入。
975 0
|
存储 人工智能 算法
Openjudge计算概论-求序列中的众数
/*===================================== 求序列中的众数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个长度为N的整数序列 (不多于128个整数),每个整数的范围在[-10^52,10^52],计算这个序列的众数。
1037 0