SZU:A26 Anagram
2014-02-15 15:34
274 查看
Judge Info
Memory Limit: 32768KBCase 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,![](http://acm.szu.edu.cn/wiki/images/math/5/a/8/5a89e7fa80cce769542bce7773519804.png)
, 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 }
相关文章推荐
- SZU:A26 Anagram
- poj 1256 Anagram
- C. Anagram codeforces
- SZU-A22
- Anagram
- SZU:A66 Plastic Digits
- Anagram
- CodeForces 144C Anagram Search
- Leetcode Valid Anagram
- uva 10825 - Anagram and Multiplication(暴力)
- 10.2 Group Anagram
- Anagram——[枚举全排列]
- 242. Valid Anagram 有效的Anagram
- POJ1256 Anagram
- 【STL】poj 1256 Anagram
- [LeetCode] Find Anagram Mappings - JS
- poj 1256 Anagram
- CodeForces 1209 C. Anagram 字符串贪心
- SZU:B47 Big Integer II
- SZU:B54 Dual Palindromes