原题如下:
原图

#include <stdio.h>
void swap(int *a, int *b)   //用于冒泡排序中两个数的交换
{
  int t = 0;
  t = *a;
  *a = *b;
  *b = t;
}
int main()
{
  int n;

  int num[101] = { 0 };    //最大不超过100位数
  scanf("%d", &amp;n);
  int t = n;   //最终的t为个数
  for (int i = 0; i &lt; n; ++i)
  {
    scanf("%d", &amp;num[i]);
  }

  for (int i = 0; i &lt; n-1; i++)    //这里遍历数组并且检测到相同的数字另后面的为0
  {
    for (int j = i+1; j &lt; n; ++j)
    {
      if (num[i] == num[j])
      {
        num[j] = 0;
      }
    }
  }

  for (int i = 0; i &lt; n-1; ++i)   //将输入的数字进行冒泡排序
  {
    for (int j = 0; j &lt; n - i - 1; ++j)
    {
      if(num[j]&gt;num[j+1])
        {
          swap(&amp;num[j], &amp;num[j + 1]);
        }
    }
  }

  for (int i = 0; i &lt; n-1; ++i)     //处理0,0则t-1
  {
    if (num[i] == 0)
    { 
      t--;
    }
  }
  printf("%d\n", t);


  for (int i = 0; i &lt; n - 1; ++i)   //输出,为0不输出
  {
    if (num[i] == 0)
    {
      t--;
      continue;
    }
    printf("%d ", num[i]);
  }
  printf("%d", num[n - 1]);
  return 0;
}

这题关键在于输入的数字从1开始,所以减少了判断,还是比较简单

最后修改:2019 年 02 月 26 日
如果觉得我的文章对你有用,请随意赞赏