#include<string>
using namespace std;
long n;
char b[200];
char a[200];
long s;
int x[1000];
int y[1000];
int main()
{freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
cin>>n;
cin>>a;
int t=strlen(a);
for(int j=0;j<t;j++)
{x[a[j]-'a']++;}
for(int i=0;i<n;i++)
{cin>>b;
if(!(strlen(b)==t)){continue;}
for(int j=0;j<t;j++)
{ y[b[j]-'a']++;
}
int f=1;
for(int j=0;j<1000;j++)
{
if(!x[j]==y[j]){f=0;break;}
}
if(f==1)s++;
for(int j=0;j<200;j++)b[j]=='0';
for(int j=0;j<1000;j++){y[i]=0;}
}
cout<<s<<endl;
return 0;
}
还有y每次不需要重新全部赋值为0吗?
还有一个 char('0')!=0 你把b数组全赋值为'0' 但int('0')==48!!!!所以每次测得的b数组长度都·················
偶厚着脸皮要分······
1.s是全局,当然不用,
2.没看到for(int j=0;j<1000;j++){y[i]=0;}吗
3.我把‘0’改为0,还不行咯!
4.分不给你
我的代码 通过了的 自己看看啊
不管了
#include <iostream>
#include <stdio.h>
using namespace std;
int n,b[28],c[28],i=0,v=0,m=0;
char a[31];
int main()
{
memset(b,0,sizeof(b));
cin>>n;
scanf ("%s",&a);
while(*(a+i)) {b[int(*(a+i)-'a')]++;i++;}
while(n>0)
{
v=i=0;
memset(c,0,sizeof(c));
scanf ("%s",&a);
while(*(a+i)) {c[int(*(a+i)-'a')]++;i++;}
for(int k=0;k<26;k++)
if(*(c+k)!=*(b+k)) {v=1;break;}
if(v==0) m++;
n--;
}
cout<<m;
}
`````我不是大牛····················我是小虾一个
不过这道题我做过······
1. freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
这两句可以丢了····
2。如果b的长度不同于a那么b不会被全部赋值为‘ ’(空格==0),所以把b,y的赋值为0放到循环开头去
3。x,y长度太拉杂了 其实26就够,只有26个小写单词·····(但不影响结果)
4.这是我改的你的代码:没过(有一个点超时) 用iostream不行 要stdio.h
#include<iostream>
#include<string>
using namespace std;
long n;
char b[200],a[200];
long s;
int x[27],y[27];
int main()
{
cin>>n;
cin>>a;
int t=strlen(a);
for(int j=0;j<t;j++)
{x[a[j]-'a']++;}
for(int i=0;i<n;i++)
{
memset(b,0,sizeof(b));
memset(y,0,sizeof(y));
cin>>b;
if(!(strlen(b)==t))
continue;
for(int j=0;j<t;j++)
y[b[j]-'a']++;
int f=1;
for(int j=0;j<27;j++)
{
if(x[j]!=y[j]){f=0;break;}
}
if(f==1) s++;
}
cout<<s<<endl;
return 0;
}
再对一下吧 我都不知道改了多少了····