题目
源地址:
理解
我又逗了= =。 题意很简单,给你指定规则的字符串,要求你转换成一个图。 我写了一个特别复杂的实现,结果总是得不到想要的结果。后来才意识到switch语句妙用,顿感自己太不机智了。 实际上,只要对每一个字符进行判断就可以了,如果是数字就叠加起来得到c,如果是b就输出前面算出的c个空格,如果是!就输出回车,如果是字母就输出前面算出来的c个字母。根本就不需要进行复杂的正数处理操作,涨姿势了。 除此之外,还有没有必要等到全部输入完了之后再进行处理。因为本地编译的时候看起来输入和输出混在了一起,实际上,输入来自于stdin,输出来自于stdout,是不会出现混淆的。所以可以放心大胆地进行单行处理,这样就省掉一个超大的二维数组。
代码
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <deque>
#include <list>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <sstream>
#include <fstream>
#define debug "output for debug\n"
#define pi (acos(-1.0))
#define eps (1e-8)
#define inf (1<<28)
#define ll long long int
using namespace std;
char s[100010];
int main(int argc, char const *argv[])
{
while(gets(s))
{
int c=0;
for(int i=0; s[i]!='\0'; i++)
{
switch(s[i])
{
case 'b':
{
for(int j=0; j<c; j++)
printf(" ");
c=0;
break;
}
case '1':
c=c+1;
break;
case '2':
c=c+2;
break;
case '3':
c=c+3;
break;
case '4':
c=c+4;
break;
case '5':
c=c+5;
break;
case '6':
c=c+6;
break;
case '7':
c=c+7;
break;
case '8':
c=c+8;
break;
case '9':
c=c+9;
break;
case '!':
printf("\n");
default:
{
for(int j=0; j<c; j++)
printf("%c",s[i]);
c=0;
break;
}
}
}
printf("\n");
}
return 0;
}
更新日志
- 2014年11月1日 已AC。