华为机考练习HJ3明明的随机数C语言思路

华为机考练习HJ3明明的随机数
C语言思路


说下思路
先把需要处理的数据的行数收进来。
就是这个while语句里面的scanf。
scanf一次只能收到一个字符。
然后再来一个scanf收需要处理的数据。

不用while的话是处理一次,即一组测试用例,就是去掉这个while循环中的判断部分,只写scanf("%d\n",&N);然后接大括号里的内容。
内部都是常规的冒泡排序法和去重法。


不过这个代码只能通过一组测试用例,无法循环输入,非常白给。求个大神指点,修改一下代码。
一开始用while(scanf("%d",&N) != EOF);//获取行数 这一句的时候,甚至循环内的scanf都无法收入数据。
改为while((~scanf("%d",&N) &&N) == EOF); 才成功接收数据。
把白给打在公屏上。


祝大家都能拿到offer。

#include<stdio.h>
#include<string.h>


//比较去重法
//冒泡排序法
int i,j,k,N;
int random[100],store[100],asb[100]  ;
int main()
{   
    // while(scanf("%d",&N)  != EOF);//获取行数
  while((~scanf("%d",&N) &&N) == EOF);//获取行数
    {    
       
      getchar();
      // scanf("%d",&N);
        for( i = 0; i < N ; i++)//收入数据
        {
            //getchar();
            scanf("%d\n",&random[i]);
           //getchar();
            store[i] = random[i];
           
        }
      
        for( j = 0; j < N; j++)        //排序
        {
            for( i = 1; i < N; i++)
            {
                if(store[i-1] >= store[i])
                {

                      asb[i] = store[i];
                      store[i] = store[i - 1];      
                      store[i-1] = asb[i];
                     
                }
            } 
        }
       

       for( j = 0; j < N ; j++)//去重
        {
            for( i = j+1; i < N ; i++)
            {
                if(store[j] == store[i])
                {  
                    for(k = i;k < N;k++)
                    {
                        store[k-1] = store[k];
                       
                     
                    }
                    N--;//缩短获取数组的有效区间
                    i--;//从新挪过来的第一个数据开始比较
                }
            }
            printf("%d\n",store[j]);
        }
    
    
  
  }
   
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值