1248 老师的点名方案

本文介绍了一种用于大学课堂的随机点名程序设计方法。该程序能够将随机数转换为特定班级中学生的序号,适用于多班级场景。通过将学生序号排列成圈,即使随机数超过总学生数,也能准确找到对应学生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

在大学课堂上有很多课程听课班级和学生都很多,全体点名要花很长时间。因此,老师经常采用部分点名的方法。为了方便,老师做了一个程序可以产生多个随机数x,每个随机数x表示一个学生的序号,这个序号用来点名或者提问某个同学。

现在你做一个程序帮助老师完成这个功能:把一个随机数x转换成一个学生的序号。转换的方案如下:

假设听课的有m个班,一班N1个学生,二班有N2个学生……m班有Nm个学生。那么一班的学生序号为:1~N1;二班的学生序号为1~N2;……m班的学生序号为1~Nm,学生总数sumN=N1+N2+…+Nm。

对于一个随机数x,当x<=sumN时,

x=1是一班1号,x=2是一班2号,……x=N1是一班的N1号(一班的最后一个序号);

x=N1+1是二班1号,x=N1+2是二班2号,……x=N1+N2是二班的N2号(二班的最后一个序号);

x=N1+N2+1是三班1号……

以此类推……

x=sumN是m班的Nm号(m班的最后一个序号),全体同学的最后一个序号;

当x>sumN时,又回来从一班1号开始了:

x=sumN+1是一班1号,x=sumN+N1是一班的N1号;……

x=sumN+N1+1是二班一号,x=sumN+N1+N2是二班的N2号;……

x=sumN+sumN+…+sumN是m班的Nm号,全体同学的最后一个序号;……

按这样顺序把全体学生的序号排成一个圈,任给一个随机数x都可以代表唯一的一个学生序号。这个点名程序就做好了。

Input

输入的第一行为一个正整数m(1<=m<=26),表示有m个班。第二行有m个正整数N1,N2,…Nm,分别表示1班、2班……m班的人数,0<N1,N2,…,Nm<=50。

从第3行开始后的若干行:每行为一个整数,表示老师取得的随机数x,0<x<=10000,至EOF结束。

Output

输出多行,每行与输入的第3行开始对应,格式为:

Class 班号 : num

其中,班号为大写字母A~Z,表示1班~26班。num为被点名学生的(该班级内)序号。例如:

“Class A : 1”表示1班的1号;

“Class C : 10”表示3班的10号。

Sample Input

3
42 39 45
1
43
91
126
168
422
2223
10000

Sample Output

Class A : 1
Class B : 1
Class C : 10
Class C : 45
Class A : 42
Class B : 2
Class B : 39
Class B : 4

HINT

Append Code

#include <stdio.h>
int main()
{
    int m,N[55],i,sum=0,x,k,l,re;
    char cla;
    scanf("%d",&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d",&N[i]);
        sum+=N[i];
    }
    while(scanf("%d",&x)!=EOF)
    {
        if(x>=sum)
        {
            k=x%sum;
            if(k==0)
            k=sum;
        }
 
        else
            k=x;
        i=0;
        l=k;
        while(1)
        {
            i++;
            re=l;
            l=l-N[i];
            if(l<0)
            {
                i--;
                break;
            }
            else if(l==0)
            {
                re=N[i];
                i--;
                break;
            }
            else
                continue;
        }
        cla='A'+i;
        printf("Class %c : %d\n",cla,re);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值