Posted on 2010-08-23 16:25
Kevin_Zhang 閱讀(232)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
模擬
http://acm.pku.edu.cn/JudgeOnline/problem?id=1102
本題目重點(diǎn)在于輸出的控制上,因?yàn)椴荒軓南峦陷敵?,因此輸出時(shí)是從左往右,自上而下的輸出。數(shù)字N看成字符串來(lái)處理。一共十個(gè)字符,如何控制。LCD輸出,又叫七段數(shù)碼管,由此可以得到啟發(fā),10個(gè)字符,每個(gè)字符7段,則建一個(gè)7X10的二維矩陣存儲(chǔ)筆畫信息,也就是一個(gè)二維數(shù)組。要基于7段數(shù)碼管的思想輸出。二維矩陣的信息比較容易得到。
#include<stdio.h>
#include<string.h>
void main()


{
void dup(char c,int n);

char line[7][11]=
{"- -- -----","| ||| ||","||||| |||"," ----- --","| | | | ","|| |||||||","- -- -- --"};//總共7筆,每一筆對(duì)每一個(gè)數(shù)字顯示不同
char str[9];//利用字符串處理測(cè)試數(shù)據(jù)將的又是在只要屏幕能容下,不管數(shù)據(jù)大小
int s,i,j,k,t;
while(scanf("%d%s",&s,str)&&s!=0)//輸入測(cè)試數(shù)據(jù)直到輸入0 0 為止,實(shí)際上只要判斷輸入的s為0即可。

{
for(j=0;j<7;j++)//按筆畫輸出為循環(huán)條件,一共輸出7筆,筆畫從0到6

{
if(j%3==0)//輸出第 0 3 6筆的時(shí)候按如下格式

{
for(k=0;k<strlen(str);k++)

{
printf(" ");
t=(int)(str[k]-48);//字符轉(zhuǎn)換成對(duì)應(yīng)的數(shù)字
dup(line[j][t],s);//重復(fù)輸出s個(gè)該筆畫
printf(" ");
}
printf("\n");//每次輸出一筆后換行
}
else //輸出第1 2 4 5 筆的時(shí)候按如下格式

{
for(i=1;i<=s;i++)//重復(fù)輸出s個(gè)該筆畫,但是要換行

{
for(k=0;k<strlen(str);k++)//第1 2 和第4 5 筆是連在一行輸出的

{
t=(int)(str[k]-48);
printf("%c",line[j][t]);
dup(' ',s);
printf("%c",line[j+1][t]);
printf(" ");
}
printf("\n");//每次輸出一筆后換行,對(duì)1 2 4 5 而言是輸出2筆就換行
}
j=j+1;
}
}
printf("\n");//兩個(gè)測(cè)試數(shù)據(jù)的輸出結(jié)果換行,第一次提交錯(cuò)誤就是犯在這兒
}
}

void dup(char c,int n)//重復(fù)輸出字符函數(shù),用于重復(fù)輸出s個(gè)字符


{
int i;
for(i=1;i<=n;i++)
printf("%c",c);
}

=======================