USC 1143: 显示器
来源:互联网 发布:unity3d手游开发教程 编辑:程序博客网 时间:2024/05/18 01:52
USC 1143:显示器
具体题目请点击以下链接:点击打开链接对于该题,我们可以先讨论s=1时的情况。当s=1时,我们可以在五行三列的方格中,将数字0-9相应部分用黑色
填充。然后发现以下规律:
可以将数字分为5个部分(即5行),每一行不同的数字有相同的部分。
1 【1】0、2、3、5、6、7、8、9 【2】1、4
2 【1】1、2、3、7 【2】5、6 【3】0、4、8、9
3 【1】0、1、7 【2】2、3、4、5、6、8、9
4 【1】2 【2】0、6、8 【3】1、3、4、5、7、9
5 【1】1、4、7 【2】0、2、3、5、6、8、9
当n>1时,规律也一样。具体代码如下(代码中是0-4行):
#include<stdio.h>#include<string.h>int main(){ int s,i,j,k,x,y; char b[15],ch; while(scanf("%d %s",&s,b)!=EOF) { if(s==0&&b[0]=='0') return 0; i=0; while(i<5) { if(i==0||i==2||i==4) { for(j=0; j<strlen(b); j++) { ch=b[j]; switch(i) { case 0: switch(ch) { case '1': case '4': { if(j!=0) putchar(' '); for(k=1; k<=s+2; k++) putchar(' '); } break; case '0': case '2': case '3': case '5': case '6': case '7': case '8': case '9': { if(j!=0) putchar(' '); putchar(' '); for(k=1; k<=s; k++) putchar('-'); putchar(' '); } break; } break; case 2: switch(ch) { case '0': case '1': case '7': { if(j!=0) putchar(' '); for(k=1; k<=s+2; k++) putchar(' '); } break; case '4': case '2': case '3': case '5': case '6': case '8': case '9': { if(j!=0) putchar(' '); putchar(' '); for(k=1; k<=s; k++) putchar('-'); putchar(' '); } break; } break; case 4: switch(ch) { case '1': case '4': case '7': { if(j!=0) putchar(' '); for(k=1; k<=s+2; k++) putchar(' '); } break; case '0': case '2': case '3': case '5': case '6': case '8': case '9': { if(j!=0) putchar(' '); putchar(' '); for(k=1; k<=s; k++) putchar('-'); putchar(' '); } break; } break; } } putchar('\n'); } else if(i==1||i==3) switch(i) { case 1: for(x=1; x<=s; x++) { for(y=0; y<strlen(b); y++) { ch=b[y]; switch(ch) { case '0': case '4': case '8': case '9': { if(y!=0) putchar(' '); putchar('|'); for(k=1; k<=s; k++) putchar(' '); putchar('|'); } break; case '5': case '6': { if(y!=0) putchar(' '); putchar('|'); for(k=1; k<=s+1; k++) putchar(' '); } break; case '1': case '2': case '3': case '7': { if(y!=0) putchar(' '); for(k=1; k<=s+1; k++) putchar(' '); putchar('|'); } break; } } putchar('\n'); } break; case 3: for(x=1; x<=s; x++) { for(y=0; y<strlen(b); y++) { ch=b[y]; switch(ch) { case '4': case '1': case '3': case '5': case '7': case '9': { if(y!=0) putchar(' '); for(k=1; k<=s+1; k++) putchar(' '); putchar('|'); } break; case '2': { if(j!=0) putchar(' '); putchar('|'); for(k=1; k<=s+1; k++) putchar(' '); } break; case '0': case '6': case '8': { if(y!=0) putchar(' '); putchar('|'); for(k=1; k<=s; k++) putchar(' '); putchar('|'); } break; } } putchar('\n'); } break; } i++; } putchar('\n'); memset(b,0,sizeof b); } return 0;}
我是以5个部分枚举的,当然也可以从0-9每个数字分别枚举。
运行效果如下:
也可以使用打表法,更简洁明了,参考代码如下:
#include <stdio.h>#include <string.h>char n1[11] = {"- -- -----"};char n2[11] = {"| ||| ||"};char n3[11] = {"||||| |||"};char n4[11] = {" ----- --"};char n5[11] = {"| | | | "};char n6[11] = {"|| |||||||"};char n7[11] = {"- -- -- --"};int main(){ int s; char szNumber[20]; int nDigit , nLength, i , j , k; while(1) { scanf( "%d%s", &s, szNumber); if (s == 0) break; nLength = strlen(szNumber); for (i = 0 ; i < nLength ; i++) //输出所有数字的笔画 1 { nDigit = szNumber[i] - '0'; printf(" "); for (j = 0 ; j < s ; j++) printf("%c", n1[nDigit]); printf(" "); } printf("\n"); for (i = 0 ; i < s ; i++) //输出所有数字的笔画2 和笔画3 { for (j = 0 ; j < nLength ; j++) { nDigit = szNumber[j] - '0'; printf("%c", n2[nDigit]); for (k = 0 ; k < s ; k++) printf(" "); printf("%c ", n3[nDigit]); } printf("\n"); } for (i = 0 ; i < nLength ; i++) //输出所有数字的笔画4 { printf(" "); nDigit = szNumber[i] - '0'; for (j = 0 ; j < s ; j++) printf("%c", n4[nDigit]); printf(" "); } printf("\n"); for (i = 0 ; i < s ; i++) //输出所有数字的笔画 5 和笔画 6 { for (j = 0 ; j < nLength ; j++) { nDigit = szNumber[j] - '0'; printf("%c", n5[nDigit]); for (k = 0 ; k < s ; k++) printf( " "); printf("%c ", n6[nDigit]); } printf("\n"); } for (i = 0 ; i < nLength ; i++) //输出所有数字的笔画 7 { printf(" "); nDigit = szNumber[i] - '0'; for (j = 0 ; j < s ; j++) printf("%c", n7[nDigit]); printf(" "); } printf("\n"); printf("\n"); }}
0 0
- USC 1143: 显示器
- 显示器
- 显示器
- 显示器
- 显示器
- 显示器
- USC Computer Vision
- USC newweek2 G
- Training@USC Greedy Tino
- training@USC 12 2
- training@USC permutation
- 讲课@USC 杂谈
- usc@1002:项目投标
- usc@1113:奖学金
- 出国体检 西安 USC
- USC oj 1404: Search
- USC newweek2 H hdu 3335
- USC 1329 Decode 坑坑坑gets
- jpa+spring配置多数据源
- linux fork 函数目的
- Spring 2.5 注释驱动的 IoC 功能
- Codeforence 337A Puzzles
- java中ConcurrentLinkedQueue类
- USC 1143: 显示器
- 第29天
- 导入android工程后出现The resource is not on the build path of a java project
- 证书安装
- java 字节流与字符流的区别
- px、dp和sp,这些单位有什么区别?
- ARM GNU 汇编宏定义
- html 可以拖动多个div
- 创意摄影:月球变唯美篮球