朝阳市做网站,天津正规网站建设调试公司,有没有免费注册的网站,做网站都需要什么步骤给定一个整数序列#xff0c;KiKi想把其中的重复的整数去掉#xff0c;并将去重后的序列从小到大排序输出。
输入描述
第一行#xff0c;输入一个整数n#xff0c;表示序列有n个整数。
第二行输入n个整数#xff08;每个整数大于等于1#xff0c;小于等于1000#xf…给定一个整数序列KiKi想把其中的重复的整数去掉并将去重后的序列从小到大排序输出。
输入描述
第一行输入一个整数n表示序列有n个整数。
第二行输入n个整数每个整数大于等于1小于等于1000整数之间用空格分隔。
输出描述
去重并且从小到大排列的整数序列整数之间用空格分隔。 对于这道题的我提供了两种解法一种容易想到一种非常巧妙。 暴力求解 思路对于给定的一个整数序列我们应该先排序而后去重先排序可以把重复的值排在一起这样重复值会比较容易去除。在本题中我们采用冒泡排序冒泡排序在之前的文章中讲过了这里提供一个链接如果需要请查看冒泡排序。本文重点讨论如何去重。 当排序完成后要进行去重下面这张图解释了去重的原理也很简单如果相邻两个数值相等那么将后n-1个数整体前移覆盖前n-1个数最终剩下n-1个数以此类推。 #include stdio.h
void bubble_sort(int* p, int sz)
{int i0;for(i0;isz-1;i){int j0;for(j0;jsz-1-i;j){if(p[j]p[j1]){int tmp0;tmpp[j];p[j]p[j1];p[j1]tmp;}}}}int main(){int n0;int i0;int arr[1000]{0};scanf(%d,n);//输入n个元素for(i0;in;i){scanf(%d,arr[i]);}//1.排序bubble_sort(arr,n);//2.去重//比较n-1对for(i0;in-1;i){if(arr[i]arr[i1]){int ki;for(ki;kn-1;k){arr[k]arr[k1];}n--;//去重完一对n少一个i--;}}//3.打印for(i0;in;i){printf(%d ,arr[i]);}return 0;
}
优雅解法 这里还有一个巧妙的解法我们创建一个1001大小的数组这样数组最大下标就是1000了因为每个整数大于等于1小于等于1000所以我们可以把整数n放到数组下标为n的位置这样重复值会被多次放到同一个下标的位置比如5重复了三次那么5会被放到数组下标为5的位置3次这样就起到去重的作用同时数字是按照坐标顺序放置自然而然已经由小到大排好序了我们只需按顺序打印值不为0的元素即可。 #include stdio.h
int main()
{int n0;int arr[1001]{0};int i0;int m0;scanf(%d,n);for(i0;in;i){scanf(%d,m);//值为m的元素放到下标为m的位置arr[m]m;}for(i0;i1000;i){if(arr[i] ! 0)printf(%d ,arr[i]);}return 0;
}