第一步输入N个数,N小于等于100,然后随机输入N个数。这里我们创建一个数组用来接收随机数。要注意数组arr[]中不能为空,不然后面会报错(堆栈损毁),题目示意N是一个小于等于100的数字,那么我们就将数组定为100个数。
int main()
{
int a = 0;
scanf("%d", &a);
int arr[100] = {0};
for(int i = 0; i <= a; i++)
{
scanf("%d", arr[i]);
}
return 0;
}
当N和随机数输完,我们用冒泡来进行排序,把最大的放到最右边。
for(int i = 0;i <= a-1;i++)
{
for(int j = 0; j <= a - 1- i;j++)
{
if(arr[j] > arr[j + 1])
{
int count = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = count;
}
}
}
这样我们就把arr数组中的数字进行了一个从小到大的排序,要将里面重复的去掉,我们可以在冒泡里面进行一个判断:两个数相同时将其中一个赋值0。
for (int i = 0; i < a - 1; i++)
{
for (int j = 0; j < a - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int count = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = count;
}
if (arr[j] == arr[j + 1])
{
arr[j] = 0;
}
}
}
然后再for循环看有几个0,创建一个变量input++,打印的个数就是N-input。最后for循环打印时从input开始打印。
int input = 0;
for (int i = 0; i < a; i++)
{
if (arr[i] == 0)
input++;
}
printf("%d\n", a - input);
for (int i = input; i < a; i++)
{
printf("%d ", arr[i]);
}
这个题主要是去重挺麻烦的,然后数组那里要注意N<=100这个条件,arr[]这个不能为空。(晚上折腾到一点,睡觉的时候想明白的,离大谱。不得不说,实在搞不明白不如睡一觉,万一灵感来了呢)