给定升序排序的数组,如果数组有 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");