查找整数C++中最不常见的数字
Look for least frequent digit in an integer C++
我必须首先说我的问题有一个规则 - 不能使用函数,循环,数组以外的任何东西。
这是我目前拥有的:
#include <iostream>
using namespace std;
int getLeastOccurredDigit(int);
int main()
{
int uIn;
cout << "Enter an Integer: ";
cin >> uIn;
cout << "nThe least occurred digit in " << uIn << " is " << getLeastOccurredDigit(uIn) << endl;
return 0;
}
int getLeastOccurredDigit(int number)
{
int freqList[10] = { 0 };
int pNum = (number < 0) ? -number : number;
while (pNum != 0)
{
freqList[(pNum % 10)]++;
pNum /= 10;
}
}
我基本上保留数组中所有可能出现的数字(0-9)的计数:
freqList[]
下一步当然是比较数组中的所有元素;忽略 0,并输出出现最少的数字。
我不知道我能做些什么来遍历数组,在忽略 0 的同时比较元素,并得出最小的值。
int getLeastOccurredDigit(int number)
{
int freqList[10] = { 0 };
int pNum = (number < 0) ? -number : number;
while (pNum != 0)
{
freqList[(pNum % 10)]++;
pNum /= 10;
}
int MAX_FREQUENCY = (sizeof(int)*CHAR_BIT+2)/3;
/*(sizeof(int)*CHAR_BIT+2)/3 is an upper bound on the number of octal
digits required for an int, and hence is an upper bound on the number
of decimal digits required for an int. by Martin Bonner [in comments]*/
int small=MAX_FREQUENCY,index=0;
for(int i=1;i<10;i++)
{
if(small>freqList[i]&&freqList[i]!=0)
{
index=i;
small=freqList[i];
}
}
return index;
}
既然你已经得到了答案,我将发布替代版本,其中你不受数组的限制:
#include <iostream>
#include <string>
#include <map>
int LeastDigit(const int& num)
{
std::string snum = std::to_string(num);
std::map<char, size_t> occur;
std::pair<char, size_t> result;
for(auto& x : snum)
occur[x]++;
result = *occur.begin();
for(auto& x : occur)
if(x.second < result.second)
result = x;
return int(result.first-48);
}
int main()
{
int num = 112233455, result;
result = LeastDigit(num);
std::cout << "Your digit: " << result << std::endl;
return 0;
}
STL让您的生活更轻松。
相关文章:
- C++输出奇怪的字符而不是数字 (Windows)
- 为什么strlen(s)与s的大小不同,为什么cout-char显示的是字符而不是数字
- 为什么 sf::Text 显示点而不是数字?
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- 不反转数字的字符反转
- 如何使数组以单词而不是数字的形式出现
- 如何打印字符串而不是数字
- 我可以在不指定数字分布的情况下使用随机生成器吗?
- 当"x"不是数字时如何避免输出零?
- 期望文本输出而不是数字
- 找不到数字文字运算符“运算符”“+BLA”
- 控制台输出显示ASCII值,而不是数字的预期数字
- 错误:找不到数字文字运算符"运算符 " " U"?
- C++:对单词而不是数字进行快速排序
- 电话拨号程序将字母转换为卡片花色而不是数字
- C 如何结束一个段循环,该循环添加数字而不使用数字作为触发器来结束循环
- 用地址而不是数字填充队列
- 将 rand() 结果写入 C++ 文本文件,而不重复数字
- 理解问 --true 0 不是数字 0
- 查找整数C++中最不常见的数字