64,637
社区成员
发帖
与我相关
我的任务
分享
//输入格式:
//一个数字表示某一周,两个数字中间以-号分隔的表示某周次区间,a-b表示 区间[a,b],程序确保a<b,但不能够确保周次间是升序排列的。所有的周次在【1,20】内。 输入有若干行,每行一个课程的上课周次。
//
//输出格式:
//从小到大的顺序输出有课程的周次,周与周间以逗号分隔,最后没有逗号。
//
//输入样例:
//3-5,8,13-15,17,10-12
//13-18,5-9
//3-13 , 13 - 17
//输出样例:
//3,4,5,8,10,11,12,13,14,15,17
//5,6,7,8,9,13,14,15,16,17,18
//3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int maxln=100;
char a[maxln][21];
char ln[maxln][80];
char *p;
int N,i,j,k,u,n,f,t,s;
int main() {
N=0;
while (1) {
if (NULL==fgets(ln[N],80,stdin)) break;
if ('\n'==ln[N][0]) break;
N++;
if (N>=maxln) break;
}
for (i=0;i<N;i++) for (j=1;j<=20;j++) a[i][j]=0;
for (i=0;i<N;i++) {
p=&ln[i][0];
s=1;
while (1) {
k=sscanf(p,"%d%n",&u,&n);
// printf("k,u,n=%d,%d,%d\n",k,u,n);
if (1==k) {
if (1==s) {f=u;t=u;s=2;}
else if (u<0) {t=-u;s=1;}
else {t=u;s=1;}
p+=n;
} else if (0==k) {
// printf("skip char[%c]\n",p[0]);
if (','==p[0]) {
// printf(" , f-t:%d-%d\n",f,t);
for (j=f;j<=t;j++) a[i][j]=1;
s=1;
}
p++;
} else {//EOF==k
// printf("EOF f-t:%d-%d\n",f,t);
for (j=f;j<=t;j++) a[i][j]=1;
break;
}
}
n=0;
for (j=1;j<=20;j++)
if (1==a[i][j]) {
if (0==n) {
printf("%d",j);
n++;
} else {
printf(",%d",j);
}
}
printf("\n");
}
return 0;
}