我想查找数字中所有数字的频率是否相同。我使用了一个大小为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表示所有非零元素都相等。
答案 0 :(得分:2)
如果您想要查找数字中所有数字的频率是否相同&#34;,那么您应该比较这些元素,而不是对它们进行异或...
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;
}
答案 1 :(得分:2)
正如在评论中所提到的,XOR不适用于此;但是,您可以使用HashSet来解决此问题:
示例强>:
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");
答案 2 :(得分:1)
这将解决您的第一个问题“检查相同的频率”:
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);