蓝桥杯 班级活动题目 第一次做题过程记录

45 阅读1分钟
我的思路

定义一个数组book分别储存1到n, 另一个数组存储输入的id,用两重循环一一比较计数,book数组从一开始,arr数组依次比较,若相等则计数count+1,若count==1则sum+1,若count>2,则sum加上count-2,  以此得到除有两个相同id外的所有id个数,最后sum/2得到要修改的个数

问题

得到除有两个相同id外的所有id个数,直接sum/2得到要修改的个数 没有考虑全面,漏掉了题目要求id只能由两个相同的 例如若为1 1 1 1,则需修改两次

还有就是定义book数组一一比较会超时

最终只通过了20%测试用例

我的代码
#include<stdio.h>
int main(){
	int n,i,sum=0,j;
	long long arr[100001]={0};
	scanf("%d",&n);
	int book[100001]={0};
	for(i=1;i<=n;i++){
		scanf("%d",&arr[i]);
	}
	
	
	for(i=1;i<=n;i++){
		book[i]=i;
	}
	for(i=1;i<=n;i++){
		int count=0;
		for(j=1;j<=n;j++){
			if(book[i]==arr[j]){
				count++;
			}
		
		}
		if(count==1){
			sum++;
		}
		else if(count>2){
			sum=sum+(count-2);
		} 
	}
	printf("%d",sum/2);
	return 0;
}