不知道这两个程序有什么区别,前一个可以AC,后一个却不可认为什么,请高手相助

不知道这两个程序有什么区别,前一个可以AC,后一个却不可以为什么,请高手相助
/*
#include<iostream>
using namespace std;
int main()
{
long n,*p,max,temp,k;
while(cin >> n && n != 0)
{
max = -1;
p = new long[n];
for(int i = 0; i < n; i++)
cin >> p[i];
  for(int j = 0 ; j < n;j++)
{
if(p[j] >= 0)
max = p[j];
else max = -p[j];
temp = j;
for(i = j; i<n ; i++)
{
if(p[i] < 0)
{
if(max < -p[i])
{
max = -p[i];
temp = i;
}
}
else
{
if(max < p[i])
{
max = p[i];
temp = i;
}
}
 
if(temp != j)
{
k = p[j];
p[j] = p[temp];
p[temp] = k;
}
}
}
cout << p[0];
for(i = 1; i < n; i++)
{
cout << " ";
cout << p[i] ;
// if(i != n-1)

}
cout << endl;
}
return 1;
}
*/
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
long n,*p,max,temp,k;
while(cin >> n && n != 0)
{
max = -1;
p = new long[n];
for(int i = 0; i < n; i++)
cin >> p[i];
  for(int j = 0 ; j < n;j++)
{
max = abs(p[j]);
temp = j;
for(i = j; i<n ; i++)
{
 
if(max < abs(p[i]))
{
max = abs(p[i]);
temp = i;
}
}
 
if(temp != j)
{
k = p[j];
p[j] = p[temp];
p[temp] = k;
}
 
}
cout << p[0];
for(i = 1; i < n; i++)
{
cout << " ";
cout << p[i] ;
// if(i != n-1)

}
cout << endl;
}
return 1;
}


#include<iostream>
using namespace std;
int main()
{
long n,*p,max,temp,k;
while(cin >> n && n != 0)
{
max = -1;
p = new long[n];
for(int i = 0; i < n; i++)
cin >> p[i];
  for(int j = 0 ; j < n;j++)
{
if(p[j] >= 0)
max = p[j];
else max = -p[j];
temp = j;
for(i = j; i<n ; i++)
{
if(p[i] < 0)
{
if(max < -p[i])
{
max = -p[i];
temp = i;
}
}
else
{
if(max < p[i])
{
max = p[i];
temp = i;
}
}
 
if(temp != j)
{
k = p[j];
p[j] = p[temp];
p[temp] = k;
}
}
}
cout << p[0];
for(i = 1; i < n; i++)
{
cout << " ";
cout << p[i] ;
// if(i != n-1)

}
cout << endl;
}
return 1;
}

------解决方案--------------------
楼主能把题目出自哪里贴出来么??都不知道你要AC哪个。
------解决方案--------------------
探讨

错误提示 i没有定义。
错误:for(i = j; i<n ; i++)
正确:for(int i = j; i<n ; i++)

------解决方案--------------------
楼主,你把题目意思要贴出来,要不然我们也不知道怎么找测试数据。。。