我必须首先说明我的问题有一个规则 - 除了函数,循环,数组之外不能使用任何其他规则。
这是我目前所拥有的:
#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,并得出最小值。
答案 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;
}
答案 1 :(得分:0)
既然你已经得到了回答,我会发布替代版本,你不仅仅受到数组的限制:
#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让您的生活更轻松。