|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题描述
编写程序,在程序中实现递增排序数组去冗余函数 int removeDuplicates(int *a, int n)。该函数去除递增排序数组中冗余的元素,让数组中的每个元素仅出现一次。函数第一个参数a表示递增排序数组,第二个参数n表示数组a的长度,函数返回去冗余后数组的长度。
程序第一行输入正整数n,表示数组的长度,第二个输入数组a的各个值。程序第一行输出冗余后数组的长度,第二行输出去冗余后数组的各个值。(注:数组要求使用动态数组)
样例输入
5
1 1 2 3 3
样例输出
3
1 2 3
就函数不知道怎么写进去,我的想法的创建新的动态数组再赋值进去打印出来,想法是美好,现实运行不怎么理想。求大佬写一份我参考参考(用你们的方法写)
- #include<stdio.h>
- #include<stdlib.h>
- int removeDuplicates(int* a, int n) {
-
- }
- int main() {
- int* str;
- int n;
- scanf("%d", &n);
- str = (int *)malloc(n * sizeof(int));
- int i;
- for (i = 0; i < n; i++)
- scanf("%d", &str[i]);
- removeDuplicates(&str, n);
- return 0;
- }
复制代码
本帖最后由 jackz007 于 2021-11-3 20:45 编辑
- int removeDuplicates(int * a , int n)
- {
- int c , d , i , j , k , m , t ;
- for(i = 0 ; i < n - 1 ; i ++) {
- for(j = i + 1 ; j && a[j] < a[j - 1] ; j --) {
- t = a[j - 1] ;
- a[j - 1] = a[j] ;
- a[j] = t ;
- }
- }
- for(m = n , d = a[0] , i = 1 ; i < m ; i ++) {
- for(j = i ; j < m && a[j] == d ; j ++) ;
- if(j > i) {
- for(c = 0 , k = j ; k < m ; k ++ , c ++) a[i + c] = a[k] ;
- m = m - (j - i) ;
- }
- d = a[i] ;
- }
- printf("%d\n" , m) ;
- printf("%d" , a[0]) ;
- for(i = 1 ; i < m ; i ++) printf(" %d" , a[i]) ;
- printf("\n") ;
- return m ;
- }
复制代码
|
|