poj 1007为何提交说是wrong answer
#include"iostream"intcalculate(char*p,intlen){intresult=0;for(inti=0;i<len;i++){chara...
#include"iostream"
int calculate(char* p,int len)
{
int result=0;
for(int i=0;i<len;i++)
{
char a=*(p+i*sizeof(char));
for(int j=i+1;j<len;j++)
{
char b=*(p+j*sizeof(char));
switch(a)
{
case 'A': break;
case 'C':
{
if(b=='A') result++;
break;
}
case 'G':
{
if(b=='A'||b=='C') result++;
break;
}
case 'T':
{
if(b!='T') result++;
break;
}
}
}
}
return result;
}
void sort(char* p,int num,int len)
{
for(int i=0;i<num;i++)
{
for(int j=i+1;j<num;j++)
{
if(calculate(p+i*sizeof(char)*50,len)>calculate(p+j*sizeof(char)*50,len))
{
char *p1=p+i*sizeof(char)*50;
char *p2=p+j*sizeof(char)*50;
for(int a=0;a<len;a++)
{
char temp=NULL;
temp=*(p1+a*sizeof(char));
*(p1+a*sizeof(char))=*(p2+a*sizeof(char));
*(p2+a*sizeof(char))=temp;
}
}
}
}
}
int main()
{
int m=0;
int n=0;
scanf("%d",&n);
scanf("%d",&m);
getchar();
char a[100][50];
char* p=&a[0][0];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
scanf("%c",&(a[i][j]));
if(j==n-1) { a[i][n]='\0';getchar();break;}
}
}
sort(p,m,n);
for(int i1=0;i1<m;i1++)
{
for(int j1=0;j1<n;j1++)
{
printf("%c",a[i1][j1]);
if(j1==n-1) printf("\n");
}
}
} 展开
int calculate(char* p,int len)
{
int result=0;
for(int i=0;i<len;i++)
{
char a=*(p+i*sizeof(char));
for(int j=i+1;j<len;j++)
{
char b=*(p+j*sizeof(char));
switch(a)
{
case 'A': break;
case 'C':
{
if(b=='A') result++;
break;
}
case 'G':
{
if(b=='A'||b=='C') result++;
break;
}
case 'T':
{
if(b!='T') result++;
break;
}
}
}
}
return result;
}
void sort(char* p,int num,int len)
{
for(int i=0;i<num;i++)
{
for(int j=i+1;j<num;j++)
{
if(calculate(p+i*sizeof(char)*50,len)>calculate(p+j*sizeof(char)*50,len))
{
char *p1=p+i*sizeof(char)*50;
char *p2=p+j*sizeof(char)*50;
for(int a=0;a<len;a++)
{
char temp=NULL;
temp=*(p1+a*sizeof(char));
*(p1+a*sizeof(char))=*(p2+a*sizeof(char));
*(p2+a*sizeof(char))=temp;
}
}
}
}
}
int main()
{
int m=0;
int n=0;
scanf("%d",&n);
scanf("%d",&m);
getchar();
char a[100][50];
char* p=&a[0][0];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
scanf("%c",&(a[i][j]));
if(j==n-1) { a[i][n]='\0';getchar();break;}
}
}
sort(p,m,n);
for(int i1=0;i1<m;i1++)
{
for(int j1=0;j1<n;j1++)
{
printf("%c",a[i1][j1]);
if(j1==n-1) printf("\n");
}
}
} 展开
1个回答
展开全部
Wrong Answer就是你程序有问题,跑出来的结果跟正确答案不一样!
建议你好好修改你的程序,用Debug的方式慢慢跑一边,这样发现错误了,对自己的提高会很大!
另外,要学会用STL中的标准库来做题,比如此题中的sort,就可以直接用,安全有效!
附上我的AC代码,写的很烂,仅供参开。
#include<iostream>
#include<algorithm>
#define N 54
#define M 105
using namespace std;
char str[M][N];
struct node
{
int num;
char *p;
}a[M];
bool less(struct node a,struct node b)
{
return a.num<b.num;
}
int main()
{
int m,n;
int i,j,k;
while(cin>>n>>m)
{
for(i=0;i<m;i++)
{
cin>>str[i];
a[i].p=str[i];
a[i].num=0;
for(j=0;j<n-1;j++)
for(k=j+1;k<n;k++)
if(str[i][j]>str[i][k])
a[i].num++;
}
sort(a,a+m,less);
for(i=0;i<m;i++)
cout<<a[i].p<<endl;
}
}
建议你好好修改你的程序,用Debug的方式慢慢跑一边,这样发现错误了,对自己的提高会很大!
另外,要学会用STL中的标准库来做题,比如此题中的sort,就可以直接用,安全有效!
附上我的AC代码,写的很烂,仅供参开。
#include<iostream>
#include<algorithm>
#define N 54
#define M 105
using namespace std;
char str[M][N];
struct node
{
int num;
char *p;
}a[M];
bool less(struct node a,struct node b)
{
return a.num<b.num;
}
int main()
{
int m,n;
int i,j,k;
while(cin>>n>>m)
{
for(i=0;i<m;i++)
{
cin>>str[i];
a[i].p=str[i];
a[i].num=0;
for(j=0;j<n-1;j++)
for(k=j+1;k<n;k++)
if(str[i][j]>str[i][k])
a[i].num++;
}
sort(a,a+m,less);
for(i=0;i<m;i++)
cout<<a[i].p<<endl;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询