как найти значение 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 ответа:
Как упоминалось в комментариях 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);