洛谷入门题:明明的随机数

 

第一步输入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[]这个不能为空。(晚上折腾到一点,睡觉的时候想明白的,离大谱。不得不说,实在搞不明白不如睡一觉,万一灵感来了呢)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值