紧急求助 C++GESP4级23年6月 编程题2 求助
  • 板块学术版
  • 楼主Ian_NIE
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/13 20:10
  • 上次更新2024/3/13 21:30:50
查看原帖
紧急求助 C++GESP4级23年6月 编程题2 求助
602171
Ian_NIE楼主2024/3/13 20:10
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;

int n, _2, len, a[25][25], trans[305], res[305];
string s;
map<char, int> mp;
map<int, char> m2;
struct node
{
	int v, id;
} cnt[305];

int calc(char a, char b)
{ // 16进制转换10进制
	return mp[a] * 16 + mp[b];
}
string back(int x)
{ // 10进制转换16进制
	int a = x / 16, b = x % 16;
	string res = "";
	res += m2[b];
	if(a != 0) res = m2[a] + res;
	return res;
}
bool cmp(node x, node y)
{
	if(x.v != y.v) return x.v > y.v;
	return x.id < y.id;
}

int main()
{
	for(char i = '0'; i <= '9'; i++)
		mp[i] = i - '0';
	for(char i = 'A'; i <= 'F'; i++)
		mp[i] = 10 + i - 'A';
	for(int i = 0; i <= 9; i++)
		m2[i] = char(i + '0');
	for(int i = 10; i <= 15; i++)
		m2[i] = char(i - 10 + 'A');
	for(int i = 1; i <= 256; i++)
		cnt[i].id = i;
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> s, len = s.size(), s = ' ' + s, _2 = len / 2;
		for(int j = 1; j <= len; j += 2)
		{
			char x = s[j], y = s[j + 1];
			a[i][(j + 1) / 2] = calc(x, y);
			cnt[calc(x, y)].v++;
		}
	}
	sort(cnt, cnt + 256, cmp);
	for(int i = 0; i <= 15; i++)
		if(back(cnt[i].id).size() == 1) cout << '0' << back(cnt[i].id);
		else cout << back(cnt[i].id);
	for(int i = 0; i <= 15; i++)
		trans[cnt[i].id] = i;
	cout << endl;
	for(int i = 0; i <= 255; i++)
	{
		int cnt1 = -1, cnt2 = -1, ans;
		for(int j = i; j >= 0; j--)
			if(trans[j])
			{
				cnt1 = j;
				break;
			}
		for(int j = i; j <= 255; j++)
			if(trans[j])
			{
				cnt2 = j;
				break;
			}
		if(cnt1 == -1) ans = trans[cnt2];
		if(cnt2 == -1) ans = trans[cnt1];
		if(i - cnt1 <= cnt2 - i) ans = trans[cnt1];
		else ans = trans[cnt2];
		res[i] = ans;
	}
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= _2; j++)
			cout << m2[res[a[i][j]]];
		cout << endl;
	}
	
	return 0;
}

样例不对,我的输出:

ABCFFF00CB09AC07101198011B6776FC
321632657CD16E
36469265ACC16D
B41632657FD16D
8F469265ACF14D
324F32657AD1FE
3246C245FC411D
BF4632687CD16D
8F469265ACC11D
B246326878D16E
83469265ACE11D

所有答案的0全部变成了6

求助,谢谢

2024/3/13 20:10
加载中...