«Bersoft» company is working on a new version of its most popular text editor — Bord 2010. Bord, like many other text editors, should be able to print out multipage documents. A user keys a sequence of the document page numbers that he wants to print out (separates them with a comma, without spaces).
Your task is to write a part of the program, responsible for «standardization» of this sequence. Your program gets the sequence, keyed by the user, as input. The program should output this sequence in format l1-r1,l2-r2,...,lk-rk, where ri + 1 < li + 1 for all i from 1 to k - 1, and li ≤ ri. The new sequence should contain all the page numbers, keyed by the user, and nothing else. If some page number appears in the input sequence several times, its appearances, starting from the second one, should be ignored. If for some element i from the new sequence li = ri, this element should be output as li, and not as «li - li».
For example, sequence 1,2,3,1,1,2,6,6,2 should be output as 1-3,6.
The only line contains the sequence, keyed by the user. The sequence contains at least one and at most 100 positive integer numbers. It's guaranteed, that this sequence consists of positive integer numbers, not exceeding 1000, separated with a comma, doesn't contain any other characters, apart from digits and commas, can't end with a comma, and the numbers don't contain leading zeroes. Also it doesn't start with a comma or contain more than one comma in a row.
Output the sequence in the required format.
1,2,3,1,1,2,6,6,2
1-3,6
3,2,1
1-3
30,20,10
10,20,30
题目链接:http://codeforces.com/problemset/problem/34/C
题目大意:给一组数字,如果有连续的数字串比如1,2,3,4,就输出1-4,否则输出单个的数字,比如1,2,3,10,就输出1-3,10
解题思路:排序去重,模拟就行。输入格式处理一下。比较水的题~
代码如下:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int a[105];
int main(void)
{
int n=0,r=0,l=0; //初始化左右下标
char x;
while(scanf("%d",&a[n++]))
{
scanf("%c",&x);
if(x=='\n') //若输入换行符,结束输入
break;
}
sort(a,a+n);
n=unique(a,a+n)-a;
for(int i=1;i<n;i++)
{
if(a[i]==a[i-1]+1) //如果连续,右下标加1
{
r++;
continue;
}
else
{
if(r==l)
printf("%d",a[l]);
else
printf("%d-%d",a[l],a[r]);
r=i,l=i;
printf(",");
}
}
if(r>l)
printf("%d-%d",a[l],a[r]);
else
printf("%d\n",a[l] );
printf("\n",n);
}
本文介绍了一款用于处理文本编辑器中多页文档打印需求的程序实现,该程序能够标准化用户输入的页码序列,将连续页码合并为区间表示,并移除重复页码。通过输入序列的排序、去重及特定格式化输出,有效简化了页码管理过程。

1294

被折叠的 条评论
为什么被折叠?



