poj1007奇怪问题!

boaobbs2785 2008-06-26 08:59:59
这是DNA序列题
自己在win-tc 执行出正确结果,但是到poj提交,显示WA,这个程序不知道哪有逻辑问题,请大家帮帮我,谢谢
#include<stdio.h>
int main()
{
int n,m,min;
int i,j,k,p,nei,wai,c[101];

char dna[101][51];
int temp;
int a[51];
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%s",dna[i]);
}
for(i=1;i<=m;i++)
{
c[i]=i;
}
for(k=1;k<=m;k++)
{
for(j=n-1;j>=0;j--)
{
for(p=1;p<10;p++)
{
if(dna[k][j]<dna[k][j-p])
{
a[k]++;

}
}
}
}
for(i=1;i<m;i++)
{
min=i;
for(j=i+1;j<m+1;j++)

if(a[j]<a[min])
min=j ;
temp=a[min];
a[min]=a[i];
a[i]=temp;
temp=c[min];
c[min]=c[i];
c[i]=temp;
}
printf("\n");
for(i=1;i<=m;i++)
{
printf("%s\n",dna[c[i]]);
}

return 0;
}
...全文
212 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeCodeSunny 2008-07-01
  • 打赏
  • 举报
回复
# include <stdio.h>
typedef struct
{
char s[50];
int n;
}d;
int u(char s[],int l)
{
int i,j,n=0;
for(i=0;i<l-1;i++)
for(j=i+1;j<l;j++)
if(s[j]<s[i])
n++;
return n;
}
void s(d r[],int n)
{
int i,j,f;
d t;
f=1;
for(i=1;i<n&&f==1;i++)
{
f=0;
for(j=0;j<n-i;j++)
if(r[j].n>r[j+1].n)
{
f=1;
t=r[j];
r[j]=r[j+1];
r[j+1]=t;
}
}
}
int main()
{
int l,n,i;
d d[100];
scanf("%d%d",&l,&n);
for(i=0;i<n;i++)
{
scanf("%s",d[i].s);
d[i].n=u(d[i].s,l);
}
s(d,n);
for(i=0;i<n;i++)
{
printf("%s\n",d[i].s);
}
return 0;
}
这是我的代码,过了的
bysdy 2008-06-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lwouyang 的回复:]
引用楼主 boaobbs2785 的帖子:
//...
int a[51];
//…
a[k]++;

数组a没有初始化可以直接使用吗?
[/Quote]
初始化了也不行~~~~
还是WA~~
bysdy 2008-06-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 boaobbs2785 的回复:]
#include <stdio.h>
#include <string.h>
int main()
{
int m,n,sum,min,temp;
int i,j,s;
int b[101],c[101];
char a[101][51];
scanf("%d%d",&m,&n);
for(i=0;i <n;i++)
scanf("%s",&a[i]);
memset(b,0,sizeof(b));
for(i=0;i <n;i++)
c[i]=i;
for(i=0;i <n;i++)
{
sum=0;

[/Quote]
不知道为什么了,高手帮忙下哈~~~
lwouyang 2008-06-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 boaobbs2785 的帖子:]
//...
int a[51];
//…
a[k]++;
[/Quote]
数组a没有初始化可以直接使用吗?
boaobbs2785 2008-06-28
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>
int main()
{
int m,n,sum,min,temp;
int i,j,s;
int b[101],c[101];
char a[101][51];
scanf("%d%d",&m,&n);
for(i=0;i<n;i++)
scanf("%s",&a[i]);
memset(b,0,sizeof(b));
for(i=0;i<n;i++)
c[i]=i;
for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<m;j++)
for(s=j+1;s<m;s++)
if(a[i][j]>a[i][s])
sum++;
b[i]=sum;
}
for(i=0;i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
if(b[j]<b[min])
min=j;
temp=b[min];
b[min]=b[i];
b[i]=temp;
temp=c[min];
c[min]=c[i];
c[i]=temp;
}
for(i=0;i<n;i++)
printf("%s\n",a[c[i]]);
return 0;
}
这个程序也是不稳定排序,但是通过了啊!
boaobbs2785 2008-06-27
  • 打赏
  • 举报
回复
http://acm.pku.edu.cn/JudgeOnline/problem?id=1007
bysdy 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 blue_galaxy 的回复:]
要使用稳定的排序~
关键值相同的元素要保持原来的相对顺序
[/Quote]
恩,有道理

#include <stdio.h>
int main()
{
int n,m,min;
int i,j,k,p,nei,wai,c[101];

char dna[101][51];
int temp;
int a[51];
scanf("%d %d",&n,&m);
for(i=1;i <=m;i++)
{
scanf("%s",dna[i]);
}
for(i=1;i <=m;i++)
{
c[i]=i;
}
for(k=1;k <=m;k++)
{
for(j=n-1;j>=0;j--)
{
for(p=1;p <10;p++) //这应该是n-1
{
if(dna[k][j] <dna[k][j-p])
{
a[k]++;

}
}
}
}
for(i=1;i <m;i++)
{
min=i;
for(j=i+1;j <m+1;j++)

if(a[j] <a[min]) //少了中括号
min=j ;
temp=a[min];
a[min]=a[i];
a[i]=temp;
temp=c[min];
c[min]=c[i];
c[i]=temp;
} //这个排序方法不稳定,要用稳定的排序方法,因为题目要求
//Since two strings can be equally sorted, then output them according to the orginal order
printf("\n"); //要去掉
for(i=1;i <=m;i++)
{
printf("%s\n",dna[c[i]]);
}

return 0;
}

blue_galaxy 2008-06-27
  • 打赏
  • 举报
回复
要使用稳定的排序~
关键值相同的元素要保持原来的相对顺序
bysdy 2008-06-26
  • 打赏
  • 举报
回复
......
楼主题目在哪的哈?发上来看看哈
boaobbs2785 2008-06-26
  • 打赏
  • 举报
回复
去掉了还是不行啊
bysdy 2008-06-26
  • 打赏
  • 举报
回复
楼主如果结果运行正确还是WA的话一般是输入输出的格式问题了哈,把printf("\n"); 去掉
按题目给的格式来~~~


printf("\n"); //去掉
for(i=1;i <=m;i++)
{
printf("%s\n",dna[c[i]]);
}

return 0;
}
boaobbs2785 2008-06-26
  • 打赏
  • 举报
回复
空格去掉还是WA啊!
boaobbs2785 2008-06-26
  • 打赏
  • 举报
回复
空格去掉还是wa
K行天下 2008-06-26
  • 打赏
  • 举报
回复

#include <stdio.h>
int main()
{
int n,m,min;
int i,j,k,p,nei,wai,c[101];

char dna[101][51];
int temp;
int a[51];
scanf("%d%d",&n,&m); //空格去掉试试!
for(i=1;i <=m;i++)
{
scanf("%s",dna[i]);
}
for(i=1;i <=m;i++)
{
c[i]=i;
}
for(k=1;k <=m;k++)
{
for(j=n-1;j>=0;j--)
{
for(p=1;p <10;p++)
{
if(dna[k][j] <dna[k][j-p])
{
a[k]++;

}
}
}
}
for(i=1;i <m;i++)
{
min=i;
for(j=i+1;j <m+1;j++)

if(a[j] <a[min])
min=j ;
temp=a[min];
a[min]=a[i];
a[i]=temp;
temp=c[min];
c[min]=c[i];
c[i]=temp;
}
printf("\n");
for(i=1;i <=m;i++)
{
printf("%s\n",dna[c[i]]);
}
getch();
return 0;
}

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧