C++,有课几何。大一新生求帮助

weixin_52795431 2021-02-04 05:30:30
7-18 有课几何 (10 分)
小明看到课表上某课程的上课周次是这样标示的:1, 8,12-17,3-6 。请你编写程序,将从输入设备上输入的如前述类似的周次表示字符串,转换成标准的周次表示。

输入格式:
一个数字表示某一周,两个数字中间以-号分隔的表示某周次区间,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
...全文
257 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2021-02-05
  • 打赏
  • 举报
回复
//输入格式:
//一个数字表示某一周,两个数字中间以-号分隔的表示某周次区间,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;
}

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧