как найти значение xor массива чисел


Я хочу найти, если частота всех цифр в числе одинакова. Я использовал массив цифр размером 10 (цифра 0-9) и инициализировал его с частотой каждой цифры.

eg: 221133
dig[] = {0,2,2,2,0,0,0,0,0,0};
and 
ans = dig[0];
for(a=1;a<10;a++)
{
    if(dig[a]!=0)
        ans = ans ^ dig[a];
}

Как найти значение xor? он должен возвращать 0, что означает, что все ненулевые элементы равны.

3 2

3 ответа:

Как упоминалось в комментариях int, XOR не будет работать для этого; однако вы можете использовать хэш-Набор для решения этой задачи:

Пример :

int [] dig = {0,2,2,2,0,0,0,0,0,0};

Set<Integer> set = new HashSet<>();

for (int d : dig)
{
    if (d != 0)
        set.add(d);
}

// check for less than 2 since 1=only 1 val, and 0=no values other than 0
if (set.size() < 2)
    System.out.println("All values are the same");
else
    System.out.println("Not all values are the same");

Если вы "хотите найти, если частота всех цифр в числе одинакова", то вы должны сравнить элементы, не фиксируя их...

public boolean isAllTheSame(int[] dig)
{
  int ans = dig[0];
  for ( int a = 1; a < 10; ++a )
  {
    if ( dig[a] != 0 )
    {
      if ( dig[a] != ans )
        return false;
      ans = dig[a];
    }
  }
  return true;
}

Это решит вашу первую задачу "проверить ту же частоту":

int value = 2241133;
String[] digits = String.valueOf(value).split("");
boolean res = true;
int initFreq = Collections.frequency(Arrays.asList(digits), digits[0]);
for (String i : digits) {
    res = res && (Collections.frequency(Arrays.asList(digits), i) == initFreq);
    if (!res) {
        break;
    }
}
System.out.println(res);