#include<iostream>
#include<string>
using namespace std;
int main()
{
int randomNumberCount;
while(cin>>randomNumberCount)
{
int *p = new int[randomNumberCount]();
for(int index = 0;index < randomNumberCount; index++)
{
cin >> *(p + index);
}
int temp;
for(int index1 = 0; index1 < randomNumberCount; index1++)
{
for(int index2 = 0; index2 < randomNumberCount - index1 - 1; index2++)
{
if(*(p + index2) >= *(p + index2 + 1))
{
temp = *(p + index2 + 1);
*(p + index2 + 1) = *(p + index2);
*(p + index2) = temp;
}
}
}
for(int index3 = 0;index3 < randomNumberCount;index3++)
{
if(*(p + index3) != *(p + index3 - 1))
{
cout<<*(p + index3)<<endl;
}
}
delete[] p;
}
return 0;
}
在这里有两点需要特别注意:
1、因为有多组测试用例,所以对于输入必须要用while循环。
2、对于new出来的数组,赋值的时候注意个数要与开辟的空间的个数相同,要不然debug的时候会出现内存的泄漏(heap corruption detected: after normal block )。
当然在此我的方法,并不是最好的方法,有一位大神用了空间换取时间的方法,个人感觉思路非常好,大家可以借鉴下,代码如下:
#include <iostream>
using namespace std;
int main() {
int N, n;
while (cin >> N) {
int a[1001] = { 0 };
while (N--) {
cin >> n;
a[n] = 1;
}
for (int i = 0; i < 1001; i++)
if (a[i])
cout << i << endl;
}
return 0;
}