打印文档(print.cpp)
测试数据来自 teachers/1418
题目描述
使用过打印机的同学都知道,打开一个文档,点击打印之后,在打印设置选项中,有一个文本框选项让我们去选择需要打印的页数。我们在文本框内输入想要打印的页码范围并点击“开始打印”,软件就会启动打印机打印对应页码的文档。
说明
现在假设你是一个编写 WPS 软件的“开发者”,请你编写一段程序,“实现”打印软件的这个逻辑功能。程序从键盘输入文档的页数和一段字符串,字符串作为输入的页码范围,然后经过计算,输出一串以“,”(英文)分隔的若干最终打印机要打印的页码。
已知输入的字符串中只包含数字0~9、“,“和”-”。比如,字符串“3,6,9,11”就表示要打印文档的第3、6、9、11页。字符串“6-9”则表示要打印文档的第6至9页,即第6、7、8、9页。字符串“3,6-9,21-23”则表示要打印文档的第3、6、7、8、9、21、22、23页。
输入输出格式
输入
输入两行,第一行一个整数 N(N < 1000)N(N<1000),表示文档的页数。
第二行一个字符串,表示告诉打印机,要打印的页码范围。
保证输入的字符串中的页码全部在 1 \sim N1∼N 之间,并且要打印的页码顺序是按照从小到大的顺序输入的。
输出
按照页码从小到大的顺序输出包含以“,”(英文)分隔的若干最终打印机要打印的页码。
输入输出样例
样例
输入1
10
1,3-6,10
Copy
输出1
1,3,4,5,6,10
Copy
输入2
50
3,6-9,21-23
Copy
输出2
3,6,7,8,9,21,22,23
Copy
时间及空间限制
1s, 256MB.
链接解析:打印文档(print.cpp)
//***wuhaotian***//
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string a;
cin>>a;
int la=a.size(),s=0;
bool f=0;
for(int i=0;i<la;i++)
{
if(a[i]>='0'&&a[i]<='9')
{
s=s*10+a[i]-48;
}
else
{
if(a[i]==',')
{
if(s!=0)
{
if(f==0)
{
cout<<s;
}
else
{
cout<<","<<s;
}
f=1;
}
}
else
{
i++;
int c=0;
while(i<la)
{
if(a[i]>='0'&&a[i]<='9')
{
c=c*10+a[i]-48;
i++;
}
else
{
i--;
break;
}
}
for(int j=s;j<=c;j++)
{
if(f==0)
{
cout<<j;
}
else
{
cout<<","<<j;
}
f=1;
}
}
s=0;
}
}
if(s!=0)
{
if(f==0)
{
cout<<s;
}
else
{
cout<<","<<s;
}
}
}