我感觉我没有找到我的错误的地方,请帮我指出一下,谢谢
题目描述
如果两个单词的组成字母完全相同,只是字母的排列顺序不一样,则它们就是变位词,两个单词相同也被认为是变位词。如tea 与eat , nic 与cin, ddc与dcd, abc与abc 等。你的任务就是判断它们是否是变位词。
输入
第一行一个N,表示下面有N行测试数据。每行测试数据包括两个单词,如tea eat ,它们之间用空格割开
输出
对于每个测试数据,如果它们是变位词,输出Yes,否则输出No.
样例输入
3
tea eat
ddc cdd
dee dde
样例输出
Yes
Yes
No
#include
#include
int main(){
int n,i,s=0,j,k,z,l,m=0;
char a[10005],b[10005];
scanf("%d",&n);
for(i=0;i"%s %s",a,b);
k=strlen(a);
for(j=0;jif(a[j]==b[j]) m++;
}
if(m==k){
printf("NO\n");
m=0;}
else if(m!=k){
for(j=0;jfor(z=j;zif(a[z]>a[j]){
l=a[z];
a[z]=a[j];
a[j]=l;
}
}
}
for(j=0;jfor(z=j;zif(b[z]>b[j]){
l=b[z];
b[z]=b[j];
b[j]=l;
}
}
}
for(j=0;jif(a[j]==b[j]) s++;
}
if(s==k) printf("YES\n");
else if(s!=k) printf("NO\n");
s=0;k=0;
}}
return 0;
}
单词相同也是变位词,第一个判断就不对
下面是我写的,仅供参考
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,m=0,j,k,z;
char a[1005],b[1005];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s%s",a,b);
k=strlen(a);
for(j=0;j<k;j++)
for(z=0;z<k;z++)
{
if(a[j]==b[z])
{
m++;
b[z]=48;
break;
}
}
if(m==k)
{
printf("Yes\n");
}
if(m!=k)
{
printf("No\n");
}
m=0;
}
}
}
仅供参考
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
int Vieta_theorem(char a[],int result)
{
int len = strlen(a), sum = 0, product = 1;
while(len--){
sum += a[len];
product *= a[len];
}
if(result)
return sum;
else
return product;
}
int anagram(char a[],char b[])
{
if(strlen(a) == strlen(b)){
if( (Vieta_theorem(a,1) == Vieta_theorem(b,1))
&& (Vieta_theorem(a,0) == Vieta_theorem(b,0)))
return 1;
else
return 0;
}else
return 0;
}
int main(){
int len, i = 0, j = 0;
char a[10005],b[10005];
scanf("%d",&len);
j = len;
int *arr = (int*)malloc(len * sizeof(int));
while(len--){
scanf("%s %s", a, b);
arr[i++] = anagram(a, b);
}
for(i = 0;i < j; i++){
if(arr[i]) printf("Yes\n");
else printf("No\n");
}
return 0;
}