计蒜客-排序后的数组删除重复数字

给定升序排序的数组,如果数组有 22 个或 22 个以上相同的数字,去掉他们,直到剩下 22 个为止

例如:

数组 A[] = [1,1,1,2,2,3]A[]=[1,1,1,2,2,3]

你的算法需要返回新数组的长度 55,

此时 A为 [1,1,2,2,3]。

输入格式

第一行输入一个不超过 200 的数字 n,第二行输入 A[n]。

输出格式

输出新数组的长度。

样例输入

6
1 1 1 1 3 3

样例输出

4

思路:

嵌套for循环判断剩序数组里的数字是否大于2个,之后用if语句减去大于两个的数字,在把for循环跳到重复数字之后进行计算,并且要记得把累加器清零。由于该题给的就是升序数列,但如果是无序数组,也很简单,写一个排序方法,先把数组进行升序或降序进行排列,之后再进行判断。

#include<stdio.h>
int main(){
    int n;        //数组大小
    int sum=0;   //用来计算相同数的个数
    int A[200];
    scanf("%d",&n);
    int num=n;    //把数组的大小赋值给num
    for(int i=0;i<n;i++){
        scanf("%d",&A[i]);
    }
    for(int j=0;j<n;j++){
        for(int k=0;k<n;k++){      //用来判断是否有相同的数字
            if(A[j]==A[k])
                sum++;
        }
        if(sum>2){            //如果数组内的相同数字大于两个,则加2减总数,加2是因为题目要求只能存在两个一样的数字。
            num=((num+2)-sum);
            j=j+sum;          //把循环跳到相同数字之后
        }
        sum=0;                //把累加器清零
    }
    printf("%d",num);         //打印输出剩下的数组的数量
}
printf("I LOVE BOSS");
点赞