2807. Кубики - 3

Дома у Витека было 2 одинаковых набора кубиков из английских букв, но во время очередной уборки один из кубиков затерялся. Помогите Витеку определить, какой же из кубиков отсутствует в одном из наборов.

 

Вход. В первой строке задано количество найденных Витеком кубиков n (1 ≤ n ≤ 105), а во второй строке n символов, изображённых на каждом из кубиков.

 

Выход.  Выведите букву, изображённую на потерявшемся кубике, либо сообщение "Ok", если Витек ошибся и ни один из кубиков не потерялся.

 

Пример входа

Пример выхода

5

abcac

b

 

 

РЕШЕНИЕ

математика – XOR

 

Анализ алгоритма

Совершим операцию xor для всех кубиков. Если ни один из кубиков не потерялся, то результат будет равен нулю. Иначе результатом будет потерянный кубик.

 

Реализация алгоритма

Читаем входные данные. Объявим переменную res типа char. Вычислим в ней операцию xor для всех кубиков.

 

scanf("%d\n",&n); res = 0;

for(i = 0; i < n; i++)

{

  scanf("%c",&ch);

  res ^= ch;

}

 

В зависимости от значения res выводим ответ.

 

if (!res) printf("Ok\n");

else printf("%c\n",res);

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    String s = con.next();

   

    char res = 0;

    for(int i = 0; i < n; i++)

      res ^= s.charAt(i);

 

    if (res == 0)

      System.out.println("Ok");

    else 

      System.out.printf("%c\n",res);

    con.close();

  }

}

 

Java реализация – символьный массив

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    char s[] = con.next().toCharArray();

   

    int res = 0;

    for(int i = 0; i < n; i++)

      res ^= s[i];

 

    if (res == 0)

      System.out.println("Ok");

    else 

      System.out.printf("%c\n",res);

    con.close();

  }

}