返回 课程
信奥AC之路-3级
0% 完成
0/0 步骤
-
第一课:数组基础4 主题|小节
-
第二课:数组基础二6 主题|小节
-
第三课:数组基础三6 主题|小节
-
第四课:数组基础四7 主题|小节
-
第五课:数组基础五5 主题|小节
-
第六课:数组用于统计,去重,排序5 主题|小节
-
第七课:冒泡排序6 主题|小节
-
第八课:数组连续性元素6 主题|小节
-
第九课:数组综合一7 主题|小节
-
第十课:字符数组7 主题|小节
-
第十一课:字符数组基础应用5 主题|小节
-
第十二课:字符数组基础应用二6 主题|小节
-
第十三课:字符数组进阶6 主题|小节
-
第十四课:字符串进阶二6 主题|小节
-
第十五课:字符串(STL)9 主题|小节
-
第十六课:字符串基础6 主题|小节
-
第十七课:字符串函数6 主题|小节
-
第十八课:字符串函数二4 主题|小节
-
第十九课:sort函数7 主题|小节
-
第二十课:字符串进阶7 主题|小节
-
第二十一课:字符串进阶二6 主题|小节
-
第二十二课:进制转换--十进制转其他进制5 主题|小节
-
第二十三课:进制转换--其他进制转十进制5 主题|小节
-
第二十四课:二进制,八进制,十六进制转换5 主题|小节
-
第二十五课:数据编码基础6 主题|小节
-
第二十六课:位运算基础6 主题|小节
课 进展
0% 完成
“有时候,我们需要解决一些特殊的统计问题,”我继续说道,”比如找出落单的筷子,或者找出缺失的数字。”
6.2.1 找筷子(找落单的数字)
题目描述: CX 小朋友找出了餐厅中所有的筷子,但遗憾的是这些筷子长短不一,而我们都知道筷子需要长度一样的才能组成双,更麻烦的是 CX 找出来的这些筷子数量为奇数,但是巧合的是,这些筷子中只有一只筷子是落单的,其余都成双,善良的你,可以帮 CX 找出这只落单的筷子的长度吗?
输入格式: 第一行读入一个数 N,它代表 CX 找到的筷子的根数。(10≤N≤10000)第二行是 N 个用空格隔开的数,代表筷子的长度。(筷子长度都是 1∼1000 之间的整数)
输出格式: 一行,落单的筷子的长度。
样例输入:
9
2 2 1 3 3 3 2 3 1
样例输出:
2
代码实现:
#include<bits/stdc++.h>
using namespace std;
int main(){
int cnt[1010] = {0}; // 统计数组初始化为0
int n, x;
cin >> n;
while(n--){
cin >> x;
cnt[x]++; // 统计每个长度出现的次数
}
int result;
for(int i = 1; i <= 1000; i++){
if(cnt[i] % 2 != 0){ // 找出现奇数次的数字
result = i;
break;
}
}
cout << result;
return 0;
}
算法解析:
- 统计每个筷子长度出现的次数
- 找出出现奇数次的长度,这就是落单的筷子
- 由于题目保证只有一个落单的,找到第一个即可
6.2.2 缺失的数字
题目描述: 有 n 个数字,值就是 1 ~ n ,现发现丢失了 2 个数字,请你根据剩余的 n – 2 个数字,编程计算一下,缺失的是哪两个数字呢?
输入格式: 第 1 行为整数 N (N≤100000)。第 2 行有 N−2 个整数(均用空格隔开)表示了剩下 N−2 个数字的值。
输出格式: 一行,按数字从小到大顺序输出两缺失的数字。两个数字之间用一个空格隔开。
样例输入:
6
4 3 1 5
样例输出:
2 6
代码实现:
#include<bits/stdc++.h>
using namespace std;
int cnt[1000005] = {0}; // 全局数组自动初始化为0
int main(){
int n, x;
cin >> n;
for(int i = 1; i <= n-2; i++){
cin >> x;
cnt[x]++; // 标记存在的数字
}
for(int i = 1; i <= n; i++){
if(!cnt[i]) // 找未被标记的数字(缺失的数字)
cout << i << " ";
}
return 0;
}
算法解析:
- 用统计数组标记所有存在的数字
- 遍历1到n,找出未被标记的数字
- 这些未被标记的数字就是缺失的数字