题意:
输入一系列的数,连续数字则输出连续区间
看第一个案例就很明显
思路:
输入字符串输入,预处理一下。
写了个挫尺取…
贴一发挫code…….
#include <bits/stdc++.h>
#include<algorithm>
using namespace std;
typedef long long LL;
int a[102];
int b[5];
char s[500];
bool vis[1010];
int main()
{
while(~scanf("%s",s))
{
int x;
int len=strlen(s);
bool flag=false;
memset(vis,0,sizeof(vis));
x=0;
for(int i=0;i<len;i++)
{
if(s[i]==',')
{
int bb=0;
if(x)
{
for(int j=1;j<=x;j++)
{
bb=bb*10+b[j];
}
}
if(!vis[bb])
{
vis[bb]=1;
}
x=0;
flag=0;
}
else
{
b[++x]=s[i]-'0';
flag=1;
}
}
if(flag)
{
int bb=0;
if(x)
{
for(int j=1;j<=x;j++)
{
bb=bb*10+b[j];
}
}
if(!vis[bb])
vis[bb]=1;
}
int s,t;
flag=false;
for(s=1;s<1000;s++)
{
while(!vis[s]&&s<=1000)
s++;
t=s;
if(s>1000)
{
if(vis[1000])
{
if(flag) printf(",");
printf("1000");
}
break;
}
while(vis[t]&&t<=1000)
t++;
t--;
if(s==t)
{
if(flag) printf(",");
printf("%d",s);
flag=1;
}
else
{
if(flag) printf(",");
printf("%d-%d",s,t);
flag=1;
}
s=t;
//printf("%d %d\n",s,t);
}
puts("");
}
return 0;
}