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;i coutst
是一个字符串,因此,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