题目如下:
算例如下:
思路:
1.获取字符串输入并保存,并计算出对应10进制数值保存
2.找出所有10进制数出现频率最高的数
3.按顺序输出不是最高频率的输入
代码:
#include<iostream>
#include<string>
using namespace std;
#define cnt 100
int conversion(string s1, int d1)
{
long i, t, num;
num = 0;
for (i = 0; i < s1.size(); i++)
{
if (s1[i] >= '0'&&s1[i] <= '9')
{
t = s1[i] - '0';
}
else t = s1[i] - 'A' + 10;
num = num*d1 + t;
}
return num;
}
int main()
{
string str[cnt],str1;
int num[cnt], mn[1024] = {0};
int n, index, i = 0, max, maxn = 0;
while (cin>>str[i])
{
if (str[i] == "END")
break;
else
{
index=str[i].find('#');
n = stoi(str[i].substr(0, index));
str1 = str[i].substr(index+1);
num[i]=conversion(str1,n);
max = i++;
}
}
for (i = 0; i < max; i++)
{
mn[num[i]] = mn[num[i]]+1;
if (mn[num[i]] > maxn)
{
maxn = mn[num[i]];
index = num[i];//获取出现最频繁的值
}
}
//cout << index << endl;
for (i = 0; i < max; i++)
{
if(num[i]!=index)
cout << str[i] << endl;
}
system("pause");
return 0;
}
代码算例运行结果正确,可惜的是马上就出结果了,没能提交到考试系统里去。
代码的缺点如下:
1.定义的mn[1024]数组容易越界,造成程序出错;
2.程序转换成10进制后,需要找出其中的异数,该部分实现有些复杂,希望有牛人指点一下有没有更好的办法。
参考文献:
[1] C++实现——任意进制之间的转换,https://blog.csdn.net/langmanqishizaijia/article/details/51087443 ,浪漫硅谷.