社区讨论

60分求助!!!(回复必关)

B3851[GESP202306 四级] 图像压缩参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m1lvhmir
此快照首次捕获于
2024/09/28 16:11
去年
此快照最后确认于
2025/11/04 18:35
4 个月前
查看原帖
CPP
#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;
	
}
这是代码,求在原来程序上改!!!

回复

2 条回复,欢迎继续交流。

正在加载回复...