C++编程,求助大佬

写一程序,生成30个[-200 300]间的非0不重复随机整数并将其保存到一个5×6的二维数组中,然后通过指针操作将每行的所有正数靠右放,所有负数靠左放。

#include<iostream>
using namespace std;
#include<cstdlib>
#include<ctime>

int main()
{
srand(time(NULL));
int number = 0;
int arr[5][6] = {0};//数组
int * p = NULL;//指针
int * q = NULL;

for(int i=0; i<5; ++i)//随机生成30个
{
for(int k=0; k<6; ++k)
{
number = rand()%501-200;
while(0 == number)
{
number = rand()%501-200;
}
while(true)
{
int flag = 0;
for(int a=0; a<5; ++a)
for(int b=0; b<6; ++b)
{
if(arr[a][b] == number)
{
flag = 1;
break;
}
}
if(1 == flag)
number = rand()%501-200;
else
break;
}
arr[i][k] = number;
}
}

for(int i=0; i<5; ++i)//每行正数往右,负数往左
{
p = &(arr[i][0]);
q = &(arr[i][5]);
while(p<q)
{
if(*p>0 && *q<0)
{
if(p<q)
{
int temp = *p;
*p = *q;
*q = temp;
p++;
q--;
}
}
else if(*p>0 && *q>0)
{
if(p<q)
{
q--;
}
}
else if(*p<0 && *q<0)
{
if(p<q)
{
p++;
}
}
else
{
if(p<q)
{
p++;
q--;
}
}
}
}

for(int i=0; i<5; ++i)//打印
{
for(int j=0; j<6; ++j)
cout << arr[i][j] << "\t";
cout << endl;
}

return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答