lsdsg 发表于 2021-10-7 21:39:20

上课周次

【问题描述】

将某课程上课周次转换为课表显示形式。从键盘录入上课周次,将其输出为逗号分隔的字符串,将连续周次合并为 x-y的形式。


【输入形式】

总共输入1行,其为空格分隔的自然数数列,输入必须从小到大排列,用-1表示输入结束。


【输出形式】

只输出1行。不连续的周次之间用英文逗号“,”分开,连续的周次之间用英文横线“-”连接起止周


【样例输入1】

1 2 3 4 5 6 -1


【样例输出1】

1-6



【样例输入2】

1 3 4 5 6 8 9 10 12 13 14 16 18 -1


【样例输出2】

1,3-6,8-10,12-14,16,18



【样例输入3】

3 -1


【样例输出3】

3

jhq999 发表于 2021-10-7 22:33:40

char ch[]={1,2 ,3, 4 ,5, 6, -1};
        int i=1,start=0,end=0;
        while (-1!=ch)
        {
                if ((ch-ch)!=1)
                {
                        end=i-1;
                        if (end-start)
                        {
                                printf("%d-%d",ch,ch);
                        }
                        else
                        {
                                printf("%d",ch);
                        }
                        if(-1!=ch)printf(",");
                        start=i;
                }

                i++;
        }

lsdsg 发表于 2021-10-8 17:41:00

jhq999 发表于 2021-10-7 22:33


它是要自己输入个东西,大佬再写写{:10_254:}

傻眼貓咪 发表于 2021-10-8 18:52:42

代码:def classPeriod(arr: list) -> str:
    string = ''
    arr.append(None)
    res = ]
    for n, i in enumerate(arr, start = 1):
      if i == res[-1]+1:
            res.append(i)
      elif len(res) > 1:
            string += f"{res}-{res[-1]},"
            res =
      else:
            string += f'{res},'
            res =
    return string[:-1]

def main():
    num = list(map(int, input().split()))[:-1]
    print(classPeriod(num))

if __name__ == "__main__":
    main()输入/输出:1 2 3 4 5 6 -1
1-6

1 3 4 5 6 8 9 10 12 13 14 16 18 -1
1,3-6,8-10,12-14,16,18

jhq999 发表于 2021-10-8 21:55:09

lsdsg 发表于 2021-10-8 17:41
它是要自己输入个东西,大佬再写写

int ch;
      int i=0 ,start=0,end=0;
      for(i=0;scanf("%d",ch+i),-1!=ch;i++);
页: [1]
查看完整版本: 上课周次