找筷子 打卡

洛谷 P1469 找筷子

题目描述
经过一段时间的紧张筹备,电脑小组的“RP 餐厅”终于开业了,这天,经理 LXC 接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题:筷子!

CX 小朋友找出了餐厅中所有的筷子,但遗憾的是这些筷子长短不一,而我们都知道筷子需要长度一样的才能组成一双,更麻烦的是 CX 找出来的这些筷子数量为奇数,但是巧合的是,这些筷子中只有一只筷子是落单的,其余都成双,善良的你,可以帮 CX 找出这只落单的筷子的长度吗?

输入格式
第一行是一个整数,表示筷子的数量 nn。

第二行有 nn 个整数,第 ii 个整数表示第 ii 根筷子的长度 a_ia
i。

输出格式
输出一行一个整数表示答案。
输入输出样例
输入 #1
9
2 2 1 3 3 3 2 3 1
输出 #1
2

分析:

这个题由于内存限制是4MB,因此不能用复杂的数据结构。可以采用关于异或有一个性质 x⊕x=0,且因为异或满足交换律,所以可以使用异或来解决此题:把每个数都异或起来(即求异或和),因为交换律的关系,成对的筷子异或结果为 00 ,而剩下的那个就是落单的。
结果发现用java过不了,应该是java占内存比较大吧

Java:


Java
import java.util.Scanner;

public class B {
    
    
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt(), ans = 0, a = 0;
		for (int i = 0; i < n; i++) {
    
    
			a = sc.nextInt();
			ans ^= a;
		}
		System.out.println(ans);
	}

}


C++:

#include<iostream>
#include<cstdio>
using namespace std;

int ans,n,a;
int main()
{
    
    
	cin>>n;
	for (int i=1;i<=n;i++)
	{
    
    
   	  	scanf("%d",&a);
		ans^=a;
	}
	printf("%d",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43688587/article/details/111681273