目录

写在前面

正文

第1关:结构体

第2关:共用体

第3关:枚举类型

写在最后


写在前面

本文代码是我自己所作,本人水平有限,可能部分代码看着不够简练,运行效率不高,但都能运行成功。

头歌 ZooKeeper配置 头歌educode_c语言


正文

第1关:结构体

本关任务:统计生日相同的学生。现在给出每个学生的学号生日,请你找出所有生日相同的学生。

右侧编辑器中有一个函数Count,请在此函数中读取数据统计结果。

输入数据,有多行,第一行是一个整数n0<=n<50),接下来有n条学生的信息。每一条学生的信息都按照此格式给出:<学号> <生日月份> <生日日期>,其中学号是5位的字符串

输出数据,输出生日相同的学生的学号,输出要求如下

  • 对每组生日相同的学生,输出一行。
  • 其中前两个数字表示月和日,后面跟着所有在当天出生的学生的学号,数字、学号之间都用一个空格分隔,简单起见,最后一个学号后面也有一个空格。
  • 对所有的输出,要求按日期从前到后的顺序输出。
  • 对生日相同的学号,按输入的顺序输出。

预期输入:

5

00001 1 10

00002 2 24

00003 1 10

00004 12 21

00005 12 21

预期输出:

1 10 00001 00003

12 21 00004 00005

温馨提示:这一道题有点难度,文章一发出就有小伙伴们询问这道题,受制于篇幅,这道题的详细解答就放在了另一篇博客之中,需要的伙伴们在这里看哦头歌结构体解答

头歌 ZooKeeper配置 头歌educode_c语言_02

#include <iostream>
using namespace std;
#include<string.h>
/**********   Begin   **********/
struct stuinfo //储存输入学生的信息,简称输入数组
{
    char id[6];
    int month;
    int day;
}stu[50];  //给50的空间是因为0<=n<50
 
struct birs //储存输出学生的信息,简称输出数组
{
    int nums;
    int month;
    int day;
    char ids[50][6];
}bir[50]={0};

void Count()
{
    int n,i,j,k=0;
    scanf("%d",&n);
    //输入n个学生信息
    for(i=0;i<n;i++)
        scanf("%s%d%d",stu[i].id,&stu[i].month,&stu[i].day);
  
    //处理
    for(i=0;i<n;i++)
    {
       //主要判断 输入数组 中的学生和 输出数组 中的每一个学生生日是否相同
        for(j=0;j<k;j++)
        {
            if(bir[j].month == stu[i].month && bir[j].day == stu[i].day)
                break;
        }
        
        //将不同生日的学生分开存放
        if(j==k)
        {
            bir[k].day = stu[i].day;
            bir[k].month = stu[i].month;
            strcpy(bir[k].ids[0],stu[i].id);
            bir[k].nums = 1;
            k++;
        }
    
        //将相同生日的学生放在一起
        else
        {
            strcpy(bir[j].ids[bir[j].nums],stu[i].id);
            bir[j].nums++;
        }
    }
    //输出
    for(i=0;i<k;i++)
    {
       //只输出同一天生日学生数>=2的数组
        if(bir[i].nums > 1)
        {
            printf("%d %d ",bir[i].month,bir[i].day);
            for(j=0;j<bir[i].nums;j++)
                printf("%s ",bir[i].ids[j]);
            printf("\n");
        }
    }
}
/**********   End   **********/

第2关:共用体

!!!你只需设计一个数据类型!!!

本关任务:设计一个门牌号数据类型RoomID,它需要包含以下几个成员变量:

  • build:字符类型,代表门牌号中的楼栋号部分。
  • floor:字符类型,代表门牌号中的楼层号部分。
  • room:字符类型,代表门牌号中的房间号部分。
  • id:字符串类型,代表整个门牌号。

要求修改id时,对应的buildfloorroom也会随之修改。同理,修改buildfloorroomid也会随之修改。

输入:每组输入有多行。第一行的第一个数据是初始的门牌号,第二个数据是接下来的**命令条数n**。接下来n行是命令。命令总共三种:bfr,分别进行修改楼栋号,楼层号,房间号的动作。

输出:系统会分别输出初始门牌号的各个部分,而执行了一条命令后,会输出完整的门牌号(即id成员的值)。

测试输入:

A31 2

b B

f 5

预期输出:

楼栋:A 楼层:3 房间:1

B31

B51

#include <iostream>
using namespace std;
/**********   Begin   **********/

union RoomID
{
   struct
   {
      char build;
      char floor;
      char  room;
   };
   char id[4];
};
/**********   End   **********/

第3关:枚举类型

本关任务:计算工作一周的工资。现在给出工厂的员工小明的上班记录以及工厂的每小时工资,请你求出他工作所能得到的报酬。

工资计算标准:在周一至周五,按实际工作小时计算。而在周六工作时间按实际工作小时的1.5倍计算,周日工作时间按实际工作小时2.0倍计算。

数据输入:第一行的第一个数是每小时的工资(**浮点类型float**),第二个数是小明的上班次数n。下面n行则是小明的上班记录,每一行的格式是<星期> <工作时间>,其中<星期>取值为1-7,代表星期一到星期日,<工作时间>为一个整数,代表小明这次上班的时长。

测试输入:

12.5 4

1 10

5 8

6 12

7 12

预期输出:

750

#include <iostream>
using namespace std;
/**********   Begin   **********/
enum WeekDay
{
    Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun
}week;

void Sum()
{
	float money;
	int day,sum,time;
 
	scanf("%f%d",&money,&day);
 
	for(int i = 0;i<day;i++){
		scanf("%d%d",&week,&time);
 
		switch(week)
        {
			case Mon:
			case Tues:
			case Wed:
			case Thurs:
			case Fri:
				sum+=money*time;
				break;
			case Sat:
				sum+=1.5*money*time;
				break;
			case Sun:
				sum+=2*money*time;
				break;
		}
 
	}
	printf("%d",sum);
}
/**********   End   **********/