找出落单的筷子:C++代码实现
找出落单的筷子:C++代码实现
有一个粗心的同学今天在食堂打翻了洗碗大伯的篮子,筷子落了一地。结果大伯怒了,硬是要这位同学把筷子一对一对配回去。每只筷子都是有长度的,长度一样的筷子才算是一对。不过洗碗大伯跟他说其中有一只筷子是落单的。你能帮这位粗心的同学找出落单的筷子的长度吗?
输入
第一行为一个正整数 n,代表筷子的支数。 接下去一行有 n 个正整数,代表每只筷子的长度 a[i] (可能有很多筷子的长度都是一样的)。
输出
输出落单的筷子的长度。
样例输入
5
1 2 1 2 3
样例输出
3
代码内容:
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<n;i+=2)
{
if(a[i]!=a[i+1])
{
cout<<a[i];
return 0;
}
}
cout<<a[n];// 特判最后一个数是落单的情况
return 0;
}
代码解释:
- 首先定义一个数组 a 来存储每只筷子的长度,并使用 cin 获取输入数据。
- 使用 sort 函数对数组进行排序,方便后续查找落单的筷子。
- 循环遍历数组,每次比较两个相邻的元素,如果长度不同,则找到了落单的筷子,输出其长度并结束程序。
- 如果循环遍历完数组后还没有找到落单的筷子,说明最后一个元素是落单的,直接输出最后一个元素的长度。
优化建议:
- 可以使用哈希表来存储每个长度出现的次数,最后遍历哈希表找出出现次数为1的长度,这样可以避免排序操作,提高效率。
- 可以使用更简洁的代码风格,例如使用
for (auto &x : a)循环遍历数组,减少代码量。 - 可以添加一些必要的注释,解释代码的功能和逻辑,提高代码的可读性。
总结:
本程序使用 C++ 实现,通过排序和比较找出落单的筷子的长度。代码简洁易懂,效率较高,可以作为解决类似问题的参考。
原文地址: https://www.cveoy.top/t/topic/oiH0 著作权归作者所有。请勿转载和采集!