60分求助!!!(回复必关)
查看原帖
60分求助!!!(回复必关)
932993
panshengqi楼主2024/9/28 16:09
#include<bits/stdc++.h>
using namespace std;
int image[20][20];
int cpimg[20][20];
int his[256];
int color[16];
int trans(char a) 
{
	if(a<='9')return (a-'0');
	return (a-'A'+10);
}
char itrans(int n) 
{
	if(n>=10)return char(n-10+'A');
	return char(n+'0');
}
int w(int y)
{
	int dis=256,ret=-1;
	for(int i=0;i<16;i++)
	{
		int d=y-color[i];
		if(d<0) d=-d;
		if(d<dis)									
		{
			dis=d;
			ret=i;
		}
	}
	return ret;
}
int main()
{
	int n=0,m=0;
	cin>>n;
	for(int i=0;i<256;i++) his[i]=-1;
	for(int i=0;i<n;i++)
	{
		char c[50];
		cin>>c;
		m=strlen(c)/2;
		for(int j=0;j<m;j++)
		{
			int q=trans(c[j*2])*16+trans(c[j*2+1]);
			image[i][j]=q;
			his[q]++;
		}
	}
	for(int i=0;i<16;i++)
	{
		int max_=0,max_id=-1;
		for(int j=0;j<256;j++)
		{
			if(his[j]>max_)
			{
				max_=his[j];
				max_id=j;
			}
		}
		color[i]=max_id;
		his[max_id]=-1;
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cpimg[i][j]=w(image[i][j]);
		}
	}
	for (int c=0;c<16;c++)
	{
		cout<<itrans(color[c]/16)<<itrans(color[c] % 16);
	}
	cout<<endl;
	for (int i=0;i<n;i++) 
	{
		for(int j=0;j<m;j++) cout<<itrans(cpimg[i][j]);
		cout<<endl;
	}
	return 0;
	
}

这是代码,求在原来程序上改!!!

2024/9/28 16:09
加载中...