看错行数与列数的输入顺序而RE

  • [1478] 泄密的图片

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • 斯诺登的泄密真是让美国捉襟见肘。今天他偷偷给艾丽叶发了一些数据,说是美国秘密拍摄的一些图片。可是都是四个矩阵为一组的写满数字的数据,要怎么看呢?好在人家发话了:为了不被发现是秘密图片,他把这些图片颜色拆分到三张图中(图B、图C和图D)。第一幅图(图A)是计算最终图片的公式,不过他不能直接透露公式是什么,需要艾丽叶酱自行探索。已知的公式是:
    1.第一幅图某个像素点是1的话,那最终图同样位置的像素点就是图B的像素点
    2.第一幅图某个像素点是3的话,那最终图同样位置的像素点就是图B对应位置的像素点加上图C对应位置的像素点
    3.第一幅图某个像素点是4的话,那最终图同样位置的像素点就是图D的像素点
    4.按照上述的推论,从1计算到7即可。若像素点不是1至7之间,那么最终图对应的位置的像素点就是0.
    5.如果某个点的和大于等于9,那这个位置的像素点就是9.
    艾丽叶没几分钟就发现了所有的秘密,你呢?

  • 输入
  • 第一行是总组数。
    第二三行表明了矩阵的列数与行数(不超过200)。
    接下来是公式图的像素点(值范围为1到7)。
    最后是三张图片的像素点(值范围为1到9)。
  • 输出
  • 对于每组数据,输出其最终图片,即计算结果。
  • 样例输入
  • 1
    3
    3
    123
    456
    722
    111
    111
    111
    222
    222
    222
    333
    333
    333
    
  • 样例输出
  • 123
    345
    622
    
注意是先输入列数,再输入行数!!!

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

char a[201][201],b[201][201],c[201][201],d[201][201];

int find(int i,int j)
{
	if(a[i][j]=='1')
		return b[i][j]-'0';
	else if(a[i][j]=='2')
		return c[i][j]-'0';
	else if(a[i][j]=='3')
		return b[i][j]-'0'+c[i][j]-'0';
	if(a[i][j]=='4')
		return d[i][j]-'0';
	if(a[i][j]=='5')
		return b[i][j]-'0'+d[i][j]-'0';
	if(a[i][j]=='6')
		return c[i][j]-'0'+d[i][j]-'0';
	if(a[i][j]=='7')
		return b[i][j]-'0'+c[i][j]-'0'+d[i][j]-'0';
	else return 0;
}

int main()
{
	int m,n,i,j,t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&m,&n);
		for(i=0;i<n;i++)
			scanf("%s",a[i]);
		for(i=0;i<n;i++)
			scanf("%s",b[i]);
		for(i=0;i<n;i++)
			scanf("%s",c[i]);
		for(i=0;i<n;i++)
			scanf("%s",d[i]);
		for(i=0;i<n;i++)
		{
			for(j=0;j<m;j++)
			{
				if(find(i,j)>9) printf("9");
				else printf("%d",find(i,j));
			}
			printf("\n");
		}
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值