C++ 我陷入了c++&引用;检查数字中所有数字的频率是否相同;

C++ 我陷入了c++&引用;检查数字中所有数字的频率是否相同;,c++,arrays,string,C++,Arrays,String,我在练习“检查一个数字中所有数字的频率是否相同”的编码问题 #包括 使用名称空间std; //如果数字为 //作为论据通过 //是一个平衡的数字。 布尔不平衡(整数N) { 字符串st=至_字符串(N); bool isBalanced=true; //要存储的频率阵列 //所有的频率 //数字的位数 int freq[10]={0}; int i=0; int n=标准尺寸(); 对于(i=0;i

我在练习“检查一个数字中所有数字的频率是否相同”的编码问题

#包括
使用名称空间std;
//如果数字为
//作为论据通过
//是一个平衡的数字。
布尔不平衡(整数N)
{ 
字符串st=至_字符串(N);
bool isBalanced=true;
//要存储的频率阵列
//所有的频率
//数字的位数
int freq[10]={0};
int i=0;
int n=标准尺寸();
对于(i=0;icout
st
是一个字符串,因此,
char
s的序列。
st[i]
是该字符串中的第i个字符

字符实际上是介于0和256之间的正整数,因此可以将它们用于数学运算,例如
-
。这些整数根据字母表分配给字符。例如:字符
0
分配给48,字符
7
分配给55(注意:在下面,我使用
x
表示字符)

它们的顺序使得数学运算可能如下:字符
7
和字符
0
正好相隔7个数字,因此
0
+7=48+7=55=
7
。因此:
7
-
0
=7


因此,您可以根据数字获得
freq
数组中的位置,即0的位置0或7的位置7。
++
运算符将该值适当地递增。

st
是一个字符串,因此,
char
s的序列。
st[i]
是该字符串中的第i个字符

字符实际上是介于0和256之间的正整数,因此可以将它们用于数学运算,例如
-
。这些整数根据字母表分配给字符。例如:字符
0
分配给48,字符
7
分配给55(注意:在下面,我使用
x
表示字符)

它们的顺序使得数学运算可能如下:字符
7
和字符
0
正好相隔7个数字,因此
0
+7=48+7=55=
7
。因此:
7
-
0
=7


因此,您可以根据数字获得
freq
数组中的位置,即0代表0的位置或7代表7的位置。
++
操作符将该值适当地递增。

这一行是浓缩为一个表达式的几件事

freq[st[i] - '0']++;
单个部分相当简单,总的来说也不太难:

st[i]-“0”
-字符数字不将1映射为1到整数。存在偏移量。
'1'
的整数值是
1+'0'
'2'
2+'0'
。因此,要从数字中减去整数,需要减去
'0'

freq[…]
-访问数组的元素。索引
i
处的元素存储数字
i
的频率


()++
-将频率增加一次。

这一行是几件事浓缩成一个表达式

freq[st[i] - '0']++;
单个部分相当简单,总的来说也不太难:

st[i]-“0”
-字符数字不将1映射为1到整数。存在偏移量。
'1'
的整数值是
1+'0'
'2'
2+'0'
。因此,要从数字中减去整数,需要减去
'0'

freq[…]
-访问数组的元素。索引
i
处的元素存储数字
i
的频率


()++
-将该频率增加1。

从单个字符串中减去“0”字符将得到您要查找的实际数字。这将给出您在代码中跟踪其频率的数字。这是因为字符存储为ASCII值的方式。请查看下表。假设int传入的eger值
N
为1221。本例中观察到的第一个值为“1”,对应于49的ASCII值。“0”的ASCII值为48。减去这两个值:49-48=1。这允许您单独访问作为中“int”值转换结果的数组的一部分的每个整数值一串


从单个字符串中减去“0”字符将得到您要查找的实际数字。这将提供您在代码中跟踪其频率的数字。这是因为字符存储为ASCII值的方式。请查看下表。假设传递的整数值
N
n是1221。本例中观察到的第一个值是“1”,对应于49的ASCII值。“0”的ASCII值是48。减去两个值:49-48=1。这允许您单独访问作为“int”值转换为字符串结果的数组的一部分的每个整数值

密码

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

    // store the frequency of 
    // the current digit 
    freq[st[i] - '0']++; 
(i=0;i //存储 //当前数字 频率[st[i]-“0']++;
遍历字符串,并为每个项减去具有值的“0”
bool isNumBalanced(int N)
{
    //We create an array of 10 for each digit
    int digits[10];
    //Initialize the difits
    for (int i = 0; i < 10; i++) digits[i] = 0;
    //If the input is 0, then we have a trivial case
    if (N == 0) return true;
    //We loop the digits
    do {
        //N % 10 is the last digit
        //We increment the frequency of that digit
        digits[N % 10]++;
    } while ((N /= 10) != 0); //We don't stop until we reach the trivial case, see above
    //Using the transitivity of equality, we compare all values to the first
    //We return false upon the first difference
    for (int j = 1; j < 10; j++)
        if (digits[0] != digits[j]) return false;
    //Otherwise we return true
    return true;
}
int arr[5]={0} // it stores 0 in all places
for(int i=0;i<5;i++){
  arr[i]++;
} // Now the array is [1 1 1 1 1]
   st="1221";

   for (i = 0; i < 4; i++) {

     freq[st[i] - '0']++;



for i=0, the freq location is : freq[49-48]++ = freq[1]++ means value of freq[1] is 1
for i=1, the freq location is : freq[50-48]++ = freq[2]++ means value of freq[2] is 1
for i=2, the freq location is : freq[50-48]++ = freq[2]++ means value of freq[2] is 2
for i=3, the freq location is : freq[49-48]++ = freq[1]++ means value of freq[1] is 2