P5730 【深基5.例10】显示屏C语言题解

该文描述了一个C语言程序,用于将输入的数字序列转化为$3 imes5$点阵的液晶屏显示效果。程序首先确定数组大小,初始化为X,然后根据输入数字改变特定位置为.来形成数字形状。在洛谷提交时,需注意处理额外的输入字符以避免全WA错误。
摘要由CSDN通过智能技术生成

# 【深基5.例10】显示屏

## 题目描述

液晶屏上,每个阿拉伯数字都是可以显示成 $3\times5$ 的点阵的(其中 `X` 表示亮点,`.` 表示暗点)。现在给出数字位数(不超过 $100$)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。

## 输入格式

第一行输入一个正整数 $n$,表示数字的位数。

第二行输入一个长度为 $n$ 的自然数。

## 输出格式

输出五行,表示显示屏上的数字。

## 样例 #1

### 样例输入 #1

```
10
0123456789
```

### 样例输出 #1

```

XXX...X.XXX.XXX.X.X.XXX.XXX.XXX.XXX.XXX
X.X...X...X...X.X.X.X...X.....X.X.X.X.X
X.X...X.XXX.XXX.XXX.XXX.XXX...X.XXX.XXX
X.X...X.X.....X...X...X.X.X...X.X.X...X
XXX...X.XXX.XXX...X.XXX.XXX...X.XXX.XXX


```

1.实现过程

根据图像规律,找出数组列数与数字位数关系,确定数组的大小。

确定数组大小之后,将数组全部赋值为’X’。另开一个新数组,将要显示的数字存

入数组。设立循环,按照每个数字,将对应位置改为“.”,得到数字的形状;

2.代码部分

#include <stdio.h>
int main ()
{
	int i,j,n,t,x,k;
	char ch;
	char a[5][400];
	char b[100];
	scanf("%d",&n);
	t = 4*n - 1;      //先确定数组大小;
	getchar();	for(i=0;i<5;i++){        //确定数组大小之后,将数组全部赋值为‘X’;
		for(j=0;j<t;j++){
			a[i][j]='X';
		}
	}
	for(i=0;i<n;i++){
		b[i] = getchar();    //将输入的数字存入另一个新数组;
	}
	for(i=0;i<n;i++){
		x = i*4;             //观察显示屏数字规律,每个数字都从第4*i列开始
		if(x!=0){
			for(int item=0;item<5;item++){
				a[item][x-1]='.';   //第一个数字之后,每次开始前打印一列‘.’;
			}
		}                    //根据数字形状,将对应位置的“X”变为“.”得到数字形状;
		if(b[i]=='0'){
			a[1][x+1]='.'; a[2][x+1]='.'; a[3][x+1]='.';
		}
		else if(b[i]=='1'){
			for(j=0;j<5;j++){
				for(k=x;k<x+2;k++){
					a[j][k]='.';
				}
			}
		}
		else if(b[i]=='2'){
			a[1][x]='.'; a[1][x+1]='.'; a[3][x+1]='.'; a[3][x+2]='.';
		}
		else if(b[i]=='3'){
			a[1][x]='.'; a[1][x+1]='.'; a[3][x]='.'; a[3][x+1]='.';
		}
		else if(b[i]=='4'){
			a[3][x]='.'; a[3][x+1]='.'; a[4][x]='.'; a[4][x+1]='.'; a[0][x+1]='.'; a[1][x+1]='.';
		}
		else if(b[i]=='5'){
			a[1][x+1]='.'; a[1][x+2]='.'; a[3][x]='.'; a[3][x+1]='.';
		}
		else if(b[i]=='6'){
			a[1][x+1]='.'; a[1][x+2]='.'; a[3][x+1]='.';
		}
		else if(b[i]=='7'){
			for(j=1;j<5;j++){
				for(k=x;k<x+2;k++){
					a[j][k]='.';
				}
			}
		}
		else if(b[i]=='8'){
			a[1][x+1]='.'; a[3][x+1]='.';
		}
		else if(b[i]=='9'){
			a[1][x+1]='.'; a[3][x]='.'; a[3][x+1]='.';
		}
	}
	for(i=0;i<5;i++){                //输出数组
		for(j=0;j<t;j++){
			printf("%c",a[i][j]);
			if(j==t-1){
				printf("\n");
			}
		}
	}
	return 0; 
}

3.关于提交错误

直接提交这份源代码洛谷会显示全WA,原因如下

 只需要在getchar()后再添加一个getchar()即可AC

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值