您的位置:首页 > 其它

SZU:A26 Anagram

2014-02-15 15:34 274 查看

Judge Info

Memory Limit: 32768KB

Case Time Limit: 10000MS

Time Limit: 10000MS

Judger: Normal

Description

An anagram is formed by rearranging the letters of a word. You are given a string, please find out if it is an anagram of a word or not. No word will have have more than 50 characters.

Input

The input will consist of a word on one line. The following line contains a number, 

, of strings to be tested.

Output

For each test string, if the test string is identical to the source string, output 'IDENTICAL', if it is an anagram, output 'ANAGRAM' otherwise output 'NOT AN ANAGRAM', in a single line.

Sample Input

cares
5
scare
races
cares
another
acres


Sample Output

ANAGRAM
ANAGRAM
IDENTICAL
NOT AN ANAGRAM
ANAGRAM

 

 

 

解题思路:字符串数组排序,但是我的方法并不好,只是勉强解出来而已。不过学会了使用qsort函数。

1 #include <stdio.h>
2 #include <string.h>
3 char A[52];
4 char B[52];
5 char C[52];
6
7 void swap(char *a,char *b){
8     char t;
9     t=*a;
10     *a=*b;
11     *b=t;
12 }
13
14 int main() {
15     scanf("%s",A);
16     int n,flag,i,j;
17     scanf("%d",&n);
18     for (i=0;i<strlen(A);++i){
19         C[i]=A[i];
20     }
21     while (n--) {
22
23         scanf("%s",B);
24         flag=1;
25         for (i=0;i<strlen(A);++i) {
26             if(A[i]!=B[i])
27                 flag=0;
28         }
29         if(flag==1){printf("IDENTICAL\n"); continue;}
30         for (i=0;i<strlen(C)-1;++i) {
31             for (j=i+1;j<strlen(C);++j) {
32                 if(B[i]>B[j])
33                     swap(&B[i],&B[j]);
34                 if(C[i]>C[j])
35                     swap(&C[i],&C[j]);
36             }
37         }
38
39         for (i=0;i<strlen(A);++i) {
40             if(C[i]!=B[i])
41                 flag=2;
42         }
43         if(flag==0){printf("ANAGRAM\n"); continue;}
44         else printf("NOT AN ANAGRAM\n");
45     }
46 }


大神解法:

1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4
5 char S[55];
6
7 int cmp(const void *a,const void *b)
8 {
9     return *(char *)a-*(char *)b;
10 }
11
12 int main()
13 {
14     int n,i,len1,len2;
15     char str[55],temp[55];
16     scanf("%s",S);
17     strcpy(temp,S);
18     len1=strlen(S);
19     qsort(S,len1,sizeof(char),cmp);
20     scanf("%d",&n);
21     for(i=0;i<n;i++)
22     {
23         memset(str,0,sizeof(str));
24         scanf("%s",str);
25         len2=strlen(str);
26         if(len2!=len1)
27         {
28             printf("NOT AN ANAGRAM\n");
29             continue;
30         }
31         if(0==strcmp(str,temp))
32         {
33             printf("IDENTICAL\n");
34             continue;
35         }
36         else
37         {
38             qsort(str,len2,sizeof(char),cmp);
39             if(0==strcmp(S,str))
40                 printf("ANAGRAM\n");
41             else
42                 printf("NOT AN ANAGRAM\n");
43         }
44     }
45     return 0;
46 }


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: