描述 在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。 输入 第一行为整数n,表示有n个学生,n ≤ 180。此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于20)和出生月(1 ≤ m ≤ 12)日(1 ≤ d ≤ 31)。名字、月、日之间用一个空格分隔 输出 每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。对所有的输出,要求按日期从前到后的顺序输出。 对生日相同的名字,按名字从短到长按序输出,长度相同的按字典序输出。如没有生日相同的学生,输出”None”。请用C语言编写
时间: 2023-03-13 13:09:27 浏览: 227
答案:给定一组数据,你可以通过比较每个学生的出生日期来找出所有生日相同的学生。首先,使用循环语句遍历每个学生的出生日期,然后比较当前学生的出生日期与其他学生的出生日期,如果存在月日完全相同的学生,则将其名字放入一个列表中,最后按照指定格式输出结果即可。
相关问题
用C语言做出一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。
### 回答1:
这个问题可以通过编写C语言代码来解决。首先,可以使用一个循环来遍历每个学生的名字和出生日期,检查其中是否有两个学生出生日期相同。如果发现有两个学生的出生日期相同,则将这两个学生的名字打印出来。完成这个步骤后,你就可以找出所有生日相同的学生了。
### 回答2:
要找出大班级中所有生日相同的学生,可以使用C语言编写一个程序来完成。下面是一个实现的示例:
```c
#include <stdio.h>
#include <string.h>
typedef struct student {
char name[20];
int month;
int day;
} Student;
int main() {
int n = 180; // 学生数量
Student students[n];
// 输入每个学生的信息
printf("请按下列格式输入学生信息:\n");
printf("姓名 月份 日:\n");
for (int i = 0; i < n; i++) {
scanf("%s %d %d", students[i].name, &students[i].month, &students[i].day);
}
// 检测生日相同的学生
printf("以下学生生日相同:\n");
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
if (students[i].month == students[j].month && students[i].day == students[j].day) {
printf("%s 和 %s", students[i].name, students[j].name);
printf(" 生日:%d月%d日\n", students[i].month, students[i].day);
}
}
}
return 0;
}
```
在程序中,我们首先定义了一个名为`Student`的结构体,其中包含学生的名字,出生月份和日期。接下来,我们通过一个循环输入每个学生的信息。
随后,我们使用两个嵌套的循环来比较每对学生的生日。如果两个学生的月份和日期相同,就打印出这两个学生的信息和生日。
最后,程序将输出所有生日相同的学生的姓名和生日。
请注意,在这种特定情况下,大班级中出现两个人生日相同的概率非常高,并不需要完全遍历所有学生即可找到生日相同的学生。
### 回答3:
根据题目要求,我们需要找出所有生日相同的学生。我们可以使用C语言来实现。
首先,我们可以定义一个结构体来存储每个学生的信息,包括姓名、出生月份和日期。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char name[20]; // 姓名
int month; // 出生月份
int day; // 出生日期
} Student;
```
接下来,我们需要读取学生的信息,并判断是否存在相同的生日。我们可以使用一个二维数组来存储学生的信息。数组的每一行表示一个学生的信息,包括姓名、出生月份和日期。我们可以使用两层循环来遍历所有的学生,并判断是否存在相同的生日。
```c
int main() {
int num_students = 180; // 学生总数
Student students[num_students];
// 读取学生的信息
for (int i = 0; i < num_students; i++) {
printf("请输入第%d个学生的姓名:", i+1);
scanf("%s", students[i].name);
printf("请输入第%d个学生的出生月份和日期(用空格分隔):", i+1);
scanf("%d %d", &students[i].month, &students[i].day);
}
// 查找相同生日的学生
for (int i = 0; i < num_students - 1; i++) {
for (int j = i + 1; j < num_students; j++) {
if (students[i].month == students[j].month && students[i].day == students[j].day) {
printf("%s和%s的生日相同:%d月%d日\n", students[i].name, students[j].name,
students[i].month, students[i].day);
}
}
}
return 0;
}
```
以上代码部分展示了如何读取学生信息,并通过两层循环查找相同生日的学生。如果找到了生日相同的学生,将会输出他们的姓名和生日。
我想用c语言完成下面这道题:在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。
### 回答1:
很高兴能回答你的问题。要找出所有生日相同的学生,你可以使用c语言中的循环结构来实现,首先,对所有学生进行一次遍历,把每个学生的出生月日信息保存到一个数组中,然后,遍历这个数组,把相同的生日信息放到一个新的数组中,最后,输出这个新的数组,就可以找出所有生日相同的学生了。希望我的回答对你有所帮助!
### 回答2:
要用C语言完成这道题,可以使用结构体和数组来存储学生的信息,然后使用嵌套循环进行比较,找出所有生日相同的学生。
首先,定义一个结构体来储存学生的姓名和生日信息:
```c
typedef struct {
char name[20];
int month;
int day;
} Student;
```
然后,声明一个数组来存储学生的信息:
```c
Student students[180];
```
接下来,可以使用一个循环来输入每个学生的姓名和生日信息:
```c
for (int i = 0; i < 180; i++) {
printf("请输入第 %d 个学生的姓名:", i+1);
scanf("%s", students[i].name);
printf("请输入第 %d 个学生的生日(月 日):", i+1);
scanf("%d %d", &students[i].month, &students[i].day);
}
```
然后,使用嵌套循环来比较每个学生之间的生日,找出所有生日相同的学生:
```c
for (int i = 0; i < 180; i++) {
for (int j = i + 1; j < 180; j++) {
if (students[i].month == students[j].month && students[i].day == students[j].day) {
printf("生日相同的学生有:%s 和 %s\n", students[i].name, students[j].name);
}
}
}
```
最后,运行程序,输入每个学生的姓名和生日信息,即可找出所有生日相同的学生。
需要注意的是,以上代码只能找出其中两个生日相同的学生,如果存在三个或更多生日相同的学生,则需要对代码进行适当的修改。
### 回答3:
要用C语言完成这道题,可以使用一个结构体数组来存储每个学生的姓名、出生月份和日期。
首先,定义一个结构体来表示学生的信息:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_STUDENTS 180
struct Student {
char name[50];
int month;
int day;
};
```
然后,在主函数中创建一个结构体数组来存储所有学生的信息:
```c
int main() {
struct Student students[MAX_STUDENTS];
// 从文件或用户输入中获取学生信息,存储到结构体数组中
// ...
return 0;
}
```
接下来,需要编写一个函数来查找生日相同的学生。该函数可以遍历结构体数组,并比较每两个学生的出生日期是否相同:
```c
void findSameBirthdays(struct Student students[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (students[i].month == students[j].month && students[i].day == students[j].day) {
printf("%s 和 %s 生日相同\n", students[i].name, students[j].name);
}
}
}
}
```
最后,在主函数中调用该函数来找出所有生日相同的学生:
```c
int main() {
struct Student students[MAX_STUDENTS];
// 从文件或用户输入中获取学生信息,存储到结构体数组中
// ...
// 调用函数查找生日相同的学生
findSameBirthdays(students, MAX_STUDENTS);
return 0;
}
```
需要注意的是,在实际应用中,可能需要从文件或用户输入中获取学生信息,并将其存储到结构体数组中。以上只是一个简单的示例,具体的实现需要根据具体需求进行调整。
阅读全文