求问一道C语言的编程题

题目描述我们的学号是根据一定的规律编制的。假定编制规律如下:a1a2a3a4a5a6a7a8a9a10a11a12其中,a1~a4是四位年份,表示年级,如2013;a5a... 题目描述
我们的学号是根据一定的规律编制的。假定编制规律如下:
a1a2a3a4a5a6a7a8a9a10a11a12
其中,a1~a4是四位年份,表示年级,如2013;a5a6两位数表示学院编号(假定学院数不超过26个),a7a8两位数表示专业编号(假定每个学院的专业数不超过26个),a9a10两位数表示班级编号(假定每个学院的每个专业的班级数不超过99个),a11a12两位数表示学生编号(假定各班学生少于100个)。
现在,输入年级、学院编号(用字母A~Z表示)、专业编号(用字母A~Z表示)、班级编号(用一个小于100的正整数表示)以及班级人数,需要你编程输出该班所有学生的学号。
输入
输入格式如下:
# $ % & @
其中,#表示年级,是一个四位数。
$表示学院编号,是一个大写英文字母。在学号中,代号为A~Z的学院分别用1~26表示。
%表示专业编号,是一个大写英文字母。在学号中,代号为A~Z的专业分别用1~26表示。
&表示班级编号,是一个小于100的正整数。
@表示班级人数,是一个小于100的正整数。

输出
输出有多行,每行是一个学号。

样例输入
2013 A B 1 10
样例输出
201301020101
201301020102
201301020103
201301020104
201301020105
201301020106
201301020107
201301020108
201301020109
201301020110
展开
 我来答
我爱上那女孩
2014-11-13 · TA获得超过466个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:129万
展开全部
#include<stdio.h>
#include<math.h>
void print(int d,int bits);
int main()
{
    int year,clas,num;//year代表年,clas代表班级,num代表人数 
    char coll,dir;        //coll代表学院college,dir代表direction专业(方向) 
    scanf("%d",&year);     //输入年份    
    getchar();            //为了迎合输入格式为一行输入,此处接收年与学院之间的空格 
    coll=getchar();        //学院 
    getchar();
    dir=getchar();
    scanf("%d",&clas);
    scanf("%d",&num);
    for(int i=1;i!=num+1;i++)
    {
        print(year,4);
        print(coll-64,2);//coll-64并在传递参数的时候强制转换为int型,A代表1; 
        print(dir-64,2);
        print(clas,2);
        print(i,2);
        printf("\n");
    }
}
/*
*将传递的数字,按照位数显示,比如传递print(12,5):标示将1按照5位输出,00012;
*/ 
void print(int d,int bits)
{
    for(int i=bits-1;i>=0;i--)
    {
        printf("%d",d/((int)pow(10,i)));
        d=d%((int)pow(10,i));
    }
}

这是改良版:学习了格式输入格式输出...

#include<stdio.h>
int main()
{
    int year,clas,num;//year代表年,clas代表班级,num代表人数 
    char coll,dir;        //coll代表学院college,dir代表direction专业(方向) 
    scanf("%d %c %c %d %d",&year,&coll,&dir,&clas,&num);     //输入 数据    
    for(int i=1;i!=num+1;i++)
    {
        printf("%04d%02d%02d%02d%02d\n",year,((int)coll-64),((int)dir-64),clas,num);
    }
}

太叔青芬俞环
2020-03-12 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.3万
采纳率:34%
帮助的人:751万
展开全部
我给你写半个答案希望你能采纳,并落到实处
输入、输出,数据存储你自己解决,我就给你说说我觉得可行的实现判别的算法。
我们用一个数据组来存储得到的各自出牌的结果,接下来定义三个计数变量比如a、b、c,分别记录得到的s有几个,p有几个,r有几个(用循环的swich语句就可以实现),然后判别结果:
分布判别a*b*c是否为0,如果不是0,代表各种出牌结果都有,也就是没有有胜利者,结果1;
如果a*b*c是0,那么判别a*b+a*c是否为0,如果为0代表只有一种结果,也就是平局,结果2;
如果a*b*c是0,a*b+a*c不为0,那么代表只有两种出牌结果,也就是有输有赢,那么就看看那种牌没出,比如:a=0的话,代表没有s,那么久输出出p牌的为赢家,出r牌的为输家;
b=0的话,代表没有p,那么出r牌的输出为赢家,出s牌的输出为输家;
c=0的话,带表没有r,那么出s牌的输出为赢家,出p牌的输出为输家。
举例:比如的到一个8人的一次游戏结果
[s,s,s,p,p,r,r,p],
那么a=3,b=3,c=2
判别出来a*b*c=18不为零,也就是结结果1;
[s,s,s,p,p]
a=3,b=2,b=0
判别a*b*c=0,
判别a*b+a*c=6,
判别a!=0,b!=0,c=0,
判别结果是
s,s,s赢家,p,p输家。
你都开始接触比较深层的程序了,输入,输出应该对你不难吧,而且费劲心思打这么多字,肯定还是想有所收获,我就不剥夺你思考的机会,不直接给答案了哈。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
laobaitu0322
2014-11-13 · TA获得超过744个赞
知道小有建树答主
回答量:900
采纳率:33%
帮助的人:628万
展开全部
#include <stdio.h>

void print2BitNumber(int);

int main() {
int i,year,class,student;
char collage,major;
scanf("%d %c %c %d %d", &year, &collage, &major, &class, &student);
for(i = 0; i < student; i++) {
printf("%d", year);
print2BitNumber(collage - 'A' + 1);
print2BitNumber(major - 'A' + 1);
print2BitNumber(class);
print2BitNumber(i + 1);
printf("\n");
}
return 0;
}

void print2BitNumber(int n) {
if(n < 10)
printf("0%d", n);
else if(n < 100)
printf("%d", n);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式