7-4 奇怪的屏幕 (100 分)

这篇博客探讨了一个独特的屏幕模型,其中每个点亮的像素会导致其周围8个点也点亮,除非这些点位于屏幕边缘。博主提出了一种程序设计任务,要求计算在给定特定数量的主动点亮像素点后,屏幕总共亮起的像素点数。输入包括屏幕的尺寸和主动点亮的点的坐标,输出是亮起的像素总数。文章可能涉及C语言编程和图形处理概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们的屏幕大都是由一个一个像素点构成的。随着各个像素点亮度,色彩等不同,屏幕上就可以显示各种不同的图案。现在有一个屏幕有些奇怪,当某一个像素点亮了以后,它周边的8个点(当这个点在屏幕的边上或角上时,这个数量是不一样的)都会亮。当然后亮的这8个点是因为这个中心点才亮的,它们不再会导致它们各自周围的点再亮了(否则一个点亮了,整个屏幕就都亮了)。我们把前一种像素点叫主动亮的点。如图所示,如果那个红色的点为主动亮的点,则红框内其他8个点则会因为这个主动亮的点也亮起来,但红框外边的点不会。

1.jpg

如果规定屏幕的左上角的坐标为(1,1),它的右边的点坐标依次为(1,2),(1,3)等等,它的下边的点坐标依次为(2,1),(3,1)等等。其他点坐标也依此类推。

现在请你写一段程序来计算一下在某种情况下这个屏幕共亮了多少个像素点。

输入格式:

第一行为三个用空格分隔的整数m,n,c(0<m,n,c<10),依次代表屏幕像素行数,列数以及主动亮的像素点的个数。后边共c行,每行均为两个用空格分隔的整数,依次代表c个主动点亮的点的行坐标和列坐标。

测试用例保证输入合法且没有重复的主动亮的点。

输出格式:

所有亮了的像素点个数(包括主动亮的点)。

输入样例:

4 6 2
2 2
4 2

输出样例:

12

代码实现: 

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) 
{
	int m,n,c;
	scanf("%d %d %d",&m,&n,&c);
	int arr[m][n];
	int row,col,i,j,k,cnt=0;
	for(j=0;j<m;j++)
	    for(k<0;k<n;k++)
	        arr[j][k]=0;
	for(i=0;i<c;i++)
	{
		scanf("%d %d",&row,&col);
		for(j=0;j<3;j++)
		    for(k=0;k<3;k++)
		        if((row-j)>=0&&(col-k)>=0&&(row-j)<m&&(col-k)<n)
		        {
		        	arr[row-j][col-k]=1;
		        	//printf("%d %d\n",row-j,col-k);
				}
		    	    		
	}
	for(j=0;j<m;j++)
	    for(k=0;k<n;k++)
	    	if(arr[j][k]==1)
	    	{
	    		cnt++;
	    		//printf("%d %d\n",j,k);
			 } 
	            
	printf("%d\n",cnt);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值