首页 > 试题广场 >

被打乱的异或和

[编程题]被打乱的异或和
  • 热度指数:217 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}有一个长度为 n-1 的整数数组 a。令 x 为数组中所有元素的按位异或结果。将 x 添加至数组末尾(此时长度为 n),并对数组元素进行随机排列。
\hspace{15pt}现给出新的数组 a,请你找回原来的 x。若存在多种可能的 x,可输出任意一个。

输入描述:
\hspace{15pt}第一行输入整数 t\ (1 \leqq t \leqq 1000),表示测试用例数。 
\hspace{15pt}每个测试用例包含两行:
\hspace{23pt}\bullet\,第一行输入整数 n\ (2 \leqq n \leqq 100),表示新数组长度;
\hspace{23pt}\bullet\,第二行输入 n 个整数 a_1,a_2,\dots,a_n\ (0 \leqq a_i \leqq 127),表示新数组的元素。


输出描述:
\hspace{15pt}对每个测试用例,输出一个整数 x ——原数组所有元素按位异或的结果。若有多种可能,可输出任意一个。
示例1

输入

4
4
4 3 2 5
5
6 1 10 7 10
6
6 6 6 6 6 6
3
100 100 0

输出

3
7
6
0

说明

第一组测试:原数组可能为 \{2,5,4\},异或结果 2\oplus5\oplus4=3
第二组测试:原数组可能为 \{1,10,6,10\},异或结果 1\oplus10\oplus6\oplus10=7
第三组测试:所有元素均为 6,因此 x=6
第四组测试:原数组可能为 \{100,100\},异或结果 100\oplus100=0
这题有问题吧。x=a1^a2^a3^...^an。
对于任意1<= i <=n,x^a1^a2^...^ai-1^ai+1^...^an=(a1^a1)^(a2^a2)^...^ai^...^(an^an)=ai。也就是说,x和任何一个ai都是其他数异或之后的结果。也就是说,数组里的任何一个数都可以作为结果。
发表于 2025-07-14 16:04:31 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int count = in.nextInt();
        for (int i = 0; i < count; i++) {
            int size = in.nextInt();
            int[] shu = new int[size];
            for (int j = 0; j < size; j++) {
                shu[j] = in.nextInt();
            }

            int k = 0;
            for (int n = 0; n < size; n++) {
                for (int m = 0; m < size; m++) {
                    if (m != n) {
                        k ^= shu[m];
                    }
                }
                if (shu[n] == k) {
                    System.out.println(k);
                    break;
                }
            }
        }
    }
}

发表于 2025-07-21 23:42:15 回复(0)
直接输出数组的第一个数 居然能过
import sys

n = int(input())
for i in range(n):
    m = int(input())
    ls = list(map(int,input().split()))
    print(ls[0])
发表于 2025-07-07 13:56:11 回复(1)
有哪位大佬能帮忙看看下面代码问题出在哪里吗?为什么测试输出全为0?
#include <stdio.h>

int main(){
    int t;
    scanf("%d",&t);

    while(t--){
        int n;
        scanf("%d", &n);

        int sum = 0;
        int a[n];

        for(int i = 0; i < n; i++){
            scanf("%d",&a[i]);
            sum ^=a[i];
        }
               
        printf("%d\n",sum);
    }

    return 0;
}
发表于 2025-07-01 15:53:33 回复(1)