读书人

初学者有关问题

发布时间: 2012-02-25 10:01:49 作者: rapoo

菜鸟问题
#include <stdio.h>
#include <string.h>
int Sum(char a[],int n)
{
int k,j,sum=0;
for (j=0;j<n;j++)
{
for (k=j+1;k<n;k++)
{
if (a[j]>a[k]) sum++;
}
}
return sum;
}
int main(int argc, char *argv[])
{
int n,m;
int i,j,t;
char a[50][110],c[110];
int b[50];
scanf("%d%d",&n,&m);
for (i=0;i<m;i++)
{
scanf("%s",a[i]);
b[i]=Sum(a[i],n); //求b[i]的值
}
//冒泡
for (i=0;i<n-1;i++)
for (j=0;j<n-1-i;j++)
{
if(b[j]>b[j+1])
{
t=b[j]; strcpy(c,a[j]);
b[j]=b[j+1]; strcpy(a[j],a[j+1]);
b[j+1]=t; strcpy(a[j+1],c); //若前个b[i]大的话就交换 连同字符窜一起交换
}
}
for (i=0;i<m;i++)
printf("%s\n",a[i]);
return 0;
}

输入的数据
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
为什么会有一个显示不出来 把数组c的大小改成10就可以了
谢谢大家

[解决办法]

C/C++ code
//冒泡  for (i=0;i<n-1;i++)for (j=0;j<n-1-i;j++)    {      if(b[j]>b[j+1])      {      t=b[j]; strcpy(c,a[j]);      b[j]=b[j+1]; strcpy(a[j],a[j+1]);         b[j+1]=t; strcpy(a[j+1],c); //若前个b[i]大的话就交换 连同字符窜一起交换        }  }
[解决办法]
1.不是很清楚,你m和n到底分别来控制什么的,假如说m控制的是输入字符串的个数,可是最后输入数据的个数却是6个,
[解决办法]
假如说n是输入字符串的个数,可是你在求Sum的时候传入的又是n。。。。求解释
[解决办法]
C/C++ code
        for (i=0;i<m-1;i++)//排序的这个地方要用m,不是n    {        for (j=0;j<m-1-i;j++)          {            if(b[j]>b[j+1])            {                t=b[j]; strcpy(c,a[j]);                b[j]=b[j+1]; strcpy(a[j],a[j+1]);                   b[j+1]=t; strcpy(a[j+1],c);             }        }    }
[解决办法]
//冒泡
for (i=0;i <n-1;i++)
{
for (j=0;j <n-1-i;j++)
{
if(b[j]> b[j+1])
{

[color=#FF0000]t=b[j]; strcpy(c,a[j]);
b[j]=b[j+1]; strcpy(a[j],a[j+1]);
b[j+1]=t; strcpy(a[j+1],c); //若[/color]前个b[i]大的话就交换 连同字符窜一起交换
}
}
printf( "a0=%s\n ",a[0]);
}


看红色那,当i=0时,j可能为8,可能会出现strcpy(a[j],a[j+1];即:strcpy(a[8],a[9]),哪来的a[8],a[9],
不知道你在做什么,具体原因自己看吧

读书人网 >C语言

热点推荐