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


{
void dup(char c,int n);

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

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

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

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

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

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

{
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");//每次輸出一筆后換行,對1 2 4 5 而言是輸出2筆就換行
}
j=j+1;
}
}
printf("\n");//兩個測試數據的輸出結果換行,第一次提交錯誤就是犯在這兒
}
}

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


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

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