论坛: 编程破解 标题: 一道难题,求解其功能,thanks 复制本贴地址    
作者: none [onizuka]    论坛用户   登录
void Func(int A[],int n)  //数组A中的n个元素全部为整数类型
  {  int i=0,j=n-1;
        while(i<j)
      {
        while(A[i]<0)i++;
        while(A[j]>=0)j++;
        if(i<j)
            Swap(A[i],A[j]);  //将数组中A的第i个元素和第j个元素对调
        else return;
        i++;j++;
        }
    }


地主 发表时间: 04-08-31 08:31

回复: 286 [unique]   版主   登录
while(A[j]>=0)j++;
这句将导致j访问数组越界,因此将产生无法意料的结果。

if(i<j)
  Swap(A[i],A[j]);  //将数组中A的第i个元素和第j个元素对调
else
  return;
如果i<j则交换,否则退出循环,但事实上,就是没有else,也将退出循环,因此这话是多余的。

整个程序的功能好象是:把后面的负数与前面的正数进行交换。

如果改成:
void Func(int A[],int n)  //数组A中的n个元素全部为整数类型
{  int i=0,j=n-1;
  while(i<j)
  {
      while(A[i]<0)i++;
      while(A[j]>=0)j--;
      if(i<j)
          Swap(A[i],A[j]);  //将数组中A的第i个元素和第j个元素对调
      i++;j--;
    }
}
则程序变成,数组A中,把负数放前面,把正数放后面。




B1层 发表时间: 04-08-31 09:38

回复: none [onizuka]   论坛用户   登录
Thanks a lot

B2层 发表时间: 04-08-31 10:45

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号