灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2513回复:0

判断输入的单词能否拼接

楼主#
更多 发布于:2012-09-06 12:31


给出一组单词,判断是否可以将单词排序,使得每个单词的第一个字母和前一个单词的最后一个字母相同。
输入:
每个测试数据的第一行为整数N(1<=N<=10000),接下来的N 行,每行为一个单词,每个单词都只包含小写字母并且最多包含100 个字符。
输出:
如果不能将单词序列重组以满足要求,则输出一行”Impossible”,否则输出”Possible”。
输入样例:
2
ok
ok
2
ok
ko
输出样例:
Impossible
Possible

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4
  5 //返回单词最后一个字符。
  6 char endOfString(char s[])
  7 {
  8     int i;
  9
10     for(i=0; s[i+1]!='\0'; i++)
11         ;
12
13     return s;
14 }
15
16 //返回单词第一个字符
17 char firstOfword(char s[])
18 {
19     return s[0];
20 }
21
22 //打印所有的单词
23 /*void print(char temp[][100],int N)
24 {
25     int i;
26     for(i=0; i<N; i++)
27         printf("%s\n",temp);
28 }*/
29
30 //查看是不是可以拼接,可则返回1,否则返回0
31 int check(char temp[][100],int N)
32 {
33     int i,j,count=0,flag_pos=1,count_N=1;
34     char head,end;
35
36     head = firstOfword(temp[0]);
37     end = endOfString(temp[0]);
38     strcpy(temp[0],"");
39
40     for(j=1; j<N; j++)
41     {
42         count=0;
43         for(i=1; i<N; i++)
44         {
45             if(strcmp(temp,"")==0)
46                 continue;
47             else if(firstOfword(temp)==end)
48             {
49                 end = endOfString(temp);
50                 strcpy(temp,"");
51                 count ++;
52                 count_N++;
53             }
54             else if(endOfString(temp)==head)
55             {
56                 head = firstOfword(temp);
57                 count++;
58                 strcpy(temp,"");
59                 count_N++;
60             }
61             else
62             continue;
63         }
64
65         if(count==0)
66         {
67             flag_pos=0;
68             break;
69         }
70
71         if(count_N==N)
72         break;
73
74     }
75     return flag_pos;
76 }
77
78 int main()
79 {
80     int N,flag_pos,i;
81     char word[1000][100];
82
83     //printf("please input;\n");
84     scanf("%d",;N);
85     for(i=0; i<N; i++)
86     {
87         scanf("%s",word);
88     }
89
90     flag_pos = check(word,N);
91     if(flag_pos==0)
92     printf("Impossible\n");
93     else
94     printf("Possible\n");
95
96     //print(word,N);
97     //printf("%s\n",word[0]);
98     //printf("The end of the word is %c\n",endOfString(word[0]));
99     //printf("The first of the word is %c\n",firstOfword(word[0]));
100
101     return 0;
102 }



喜欢0 评分0
游客

返回顶部