华为机考练习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;
}