题目
输入限定个数的数组,相同的数值保留一个,并且对不同的数值进行大小排序,最后输出。
输入输出示例:10
20 40 32 67 78 89 56 23 1 5 20
9
1 5 20 23 32 40 56 67 78 89
#include <stdio.h>
int main()
{
int num=0;
scanf("%d",&num);
int a[num];
for(int i=0; i<num; i++)
{
scanf("%d",&a[i]);
} //读取数组
for(int i=0; i<num-1; i++) //查重操作
{
for(int j=i+1; j<num; j++)
{
int desk;
desk=a[i];
if(desk==a[j])
{
a[j]=-1;
}
}
}
for(int i=0; i<num-1; i++) //冒泡排序
{
for(int j=0; j<num-i-1; j++)
{
int c;
if(a[j]>a[j+1])
{
c=a[j+1];
a[j+1]=a[j];
a[j]=c;
}
}
}
int num2=0; //计数并且输出
int flag=0;
for(int i=0; i<num; i++)
{
if(a[i]!=-1)num2++;
}
printf("%d\n",num2);
for(int i=0; i<num; i++)
{
if(flag==1)printf(" ");
if(a[i]!=-1)
{
flag=1;
printf("%d",a[i]);
}
}
return 0;
}
思路描述:较简单,如代码注释所示
过程反思 :
查重思路有创新之处:利用 -1 替代重复多余的值。(不影响后期大小排序并且容易筛选)
冒泡法出错 应用不熟练(冒泡法确定位置值一定是从末尾往头开始确定的!)(并且两层循环)
最后控制输出格式也有创新(利用标志FLAG控制空格问题)以后再遇见这种输出格式 “56 89 45 23 1 564”可以参考该方法 还是先输出空格的思路 因为空格输出了就吃不掉了!!