讨论 / 291题,总是wa:0,列位看一下
lsw1997 2012-10-04 02:29:00
点我顶贴 收藏 删除
#include<iostream>

#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;

}

#1 coldffire@2010-08-26 05:12:00
回复 删除
问下 s不需要赋初值吗?

还有y每次不需要重新全部赋值为0吗?

还有一个 char('0')!=0 你把b数组全赋值为'0' 但int('0')==48!!!!所以每次测得的b数组长度都·················

偶厚着脸皮要分······

#2 lsw1997@2010-08-26 22:31:00
回复 删除
回复 沙发coldffire 的帖子

1.s是全局,当然不用,

2.没看到for(int j=0;j<1000;j++){y[i]=0;}吗

3.我把‘0’改为0,还不行咯!

4.分不给你

#3 coldffire@2010-08-27 06:41:00
回复 删除
不想看了···自己对对啊

我的代码 通过了的 自己看看啊

不管了

#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;

}

#4 lsw1997@2010-08-27 07:33:00
回复 删除
回复 地毯coldffire 的帖子

不过还是希望各位大牛可以指出我的问题,别发程序咯

#5 coldffire@2010-08-27 08:35:00
回复 删除
回复 地板lsw1997 的帖子

`````我不是大牛····················我是小虾一个

不过这道题我做过······

#6 lsw1997@2010-08-27 21:29:00
回复 删除
我知道你做过,简直是灌水!!!
#7 lsw1997@2010-08-27 21:30:00
回复 删除
我想知道问题在哪!
#8 coldffire@2010-08-27 22:40:00
回复 删除
````能解释下每个变量的意义吗?
#9 lsw1997@2010-08-27 22:57:00
回复 删除
a,是母单词,b是每次的单词,s累加,x是母单词的字母数,y对应b的
#10 coldffire@2010-08-27 23:22:00
回复 删除
说实话 我很想BS你`````要改的地方很多···不过最重要的我终于找到了 哈哈

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;

}

再对一下吧 我都不知道改了多少了····

查看更多回复
提交回复