CCF 201909-3 字符画

15 篇文章 0 订阅

CCF 201909-3 字符画

在这里插入图片描述题目很难理解,准确来说是无关和迷惑的内容过多,所以审题并准确理解出题人想让你做的事真的很重要呐!为理顺思路,看了一些大牛写的代码(写的人不怎么多??),自己写了程序,也测试了一下,貌似结果没问题(???),但是提交到系统就是错误。唉,本人愚笨,在此请路过的大牛们帮忙找找问题,先谢过了!

import java.util.Scanner;

public class Main {

	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);
		String[] input = scanner.nextLine().split(" ");
		int m = Integer.parseInt(input[0]);
		int n = Integer.parseInt(input[1]);
		String[] data = scanner.nextLine().split(" ");
		int p = Integer.parseInt(data[0]);
		int q = Integer.parseInt(data[1]);
		int s = p*q;
		
		int[][][] color = new int[n][m][3];
		
		for(int i=0 ; i<n ; i++) {
			for(int j=0 ; j<m ; j++) {
				String line = scanner.nextLine();
				int t = 0;
				if(line.length()==2) {
					for(int k=0 ; k<3 ; k++)
						color[i][j][k]=Integer.parseInt(line.substring(1,1)+line.charAt(1),16);
				}else if(line.length()==4) {
					for(int k=0 ; k<3 ; k++)
						color[i][j][k]=Integer.parseInt(line.substring(k+1,k+2)+line.charAt(k+1),16);
				}
				else {
					for(int k=0 ; k<3 ; k++) {
						color[i][j][k]=Integer.parseInt(line.substring(t+1,t+3), 16);
						t=t+2;
					}
				}
			}	
		}
		scanner.close();
		
		int R=0,G=0,B=0,r=0,g=0,b=0;
		for(int i=0 ; i<n/q ; i++) {
			for(int j=0 ; j<m/p ; j++) {
				R=0;G=0;B=0;
				for(int k=i ; k<q*(i+1) ; k++) {
					for(int l=j ; l<p*(j+1) ; l++) {
						R+=color[k][l][0];
						G+=color[k][l][1];
						B+=color[k][l][2];
					}
				}
				R/=s;G/=s;B/=s;
				if(!(R==r&&G==g&&B==b)) {
					if(R==0&&G==0&B==0)
						System.out.print(toHex("[0m"));
					else {
						String temp = (char)27+"[48;2"+";"+String.valueOf(R)+";"+String.valueOf(G)+";"+String.valueOf(B)+"m";
					    System.out.print(toHex(temp));
					}
					r=R;g=G;b=B;	
				}
				System.out.print(toHex(" "));
			}
			if(R!=0||G!=0||B!=0)System.out.print(toHex((char)27+"[0m"));
			System.out.print(charToHex('\n'));
			r=g=b=0;
		}

	}

	public static String toHex(String str){
		String s = "";
		for(int i=0 ; i<str.length() ; i++) {
			int ch = (int)str.charAt(i);
			s = s+"\\x"+Integer.toHexString(ch).toUpperCase();
		}
		return s;
	}
	
	public static String charToHex(char ch){
		String s = "";
			s = s+"\\x0"+Integer.toHexString(ch).toUpperCase();
		return s;
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值