测试给出数据,输出结果正确
思路是 将数组a中砍后的元素和数组b比对,一样的,将b中赋值0标记,再降序排列,截取非零部分输出,
代码见下
{
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b);
int main(void)
{
int K;
scanf("%d", &K);
int a[K], b[K], i=0;
for (; i<K; i++)
{
scanf("%d", &a[i]);
b[i] = a[i];
}
for (i=0; i<K; i++)
{
if (a[i] != 0)
{
if (a[i]%2 == 0)
{
a[i] /= 2;
}
else
{
if (a[i] > 100) a[i] = 1;
a[i] = (3*a[i]+1)/2;
}
}
int j=0;
for (; j<K; j++)
{
if (a[i]==b[j])
{
b[j]=0;
}
}
}
qsort(b, K, sizeof(int), cmp);
int j;
for (i=0; i<K; i++)
{
if (b[i] == 0)
{
j = i-1;
break;
}
}
for (i=0; i<j; i++)
{
printf("%d ", b[i]);
}
printf("%d", b[j]);
return 0;
}
int cmp(const void *a, const void *b)
{
return *(int )b-(int *)a;
}
}