无暴力,无骗分,纯新手解法
2026-09-11 19:55:00
发布于:上海
5阅读
0回复
0点赞
想不出来就设变量,输入都会吧
int n, m;
cin >> n >> m;
int a[105];
for(int i = 1; i <= m; i++){
cin >> a[i];
}
判断是否有编号不存在在这m次报号里面
int s = 0;//用来存储的变量
int b[105];//用来存储的变量
for(int j = 0; j <= n - 1; j++){//需要判断的编号:0到n - 1
for(int i = 1; i <= m; i++){//运用枚举,把每一个a都拿出来遍历
if(a[i] == j){//判断数组是否有该编号j(这里下面两行是判断有编号之后的代码)
s = 0;//s = 0代表已经有该编号
break;//报号里面已经有了该数字,无需判断,结束循环
}
else{//如果没有
s++;//记录s:s指数组中有多少个编号与编号不同,结合上面的判断,s只能是0或m
}
}
if(s == 0){//如果s = 0(有符号j)
b[j] = j;//记录b[j] = j:指已经存在该符号,如果有这个符号j,那么第j个b就是j
continue;//回到循环继续判断
}
}
做到这里就要结束了,准备分情况输出,因为输出有两种形式
int l = 0;//用来存储的变量
for(int j = 0; j <= n - 1; j++){
if(b[j] != j){//如果没有出现编号j
cout << j << " ";//输出这个缺失的编号
}
else{//如果第j个b是j
l++;//l++:记录第j个b是j的个数
}
}
if(l == n){//如果不缺少符号
cout << n;//按照题目输出n
}
}
不要无脑抄答案,一定要看懂!
这里空空如也

有帮助,赞一个