输入格式: 首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据第一行输入n,第二行输入n个不超过20的正整数,依次表示这n个人所持有的密码。 输出格式: 对于每组测试,按照出列的顺序输出各人的编号。每两个编号之间留一个空格。 运用c语言的线性表实现程序
时间: 2024-10-20 19:15:47 浏览: 72
Java实现OJ多组测试数据的输入方法
5星 · 资源好评率100%
你可以使用C语言的结构体和动态内存分配来实现这种输入格式的处理。以下是基本的代码框架:
```c
#include <stdio.h>
#include <stdlib.h> // 包含malloc和free用于动态内存管理
typedef struct {
int id;
int password;
} Person;
void inputAndCreateArray(int n) {
Person *people = (Person*) malloc(n * sizeof(Person)); // 动态分配存储空间
// 读取每个人的id和密码
for (int i = 0; i < n; i++) {
scanf("%d %d", &people[i].id, &people[i].password);
}
return people;
}
void playGame(Person *people, int n) {
while (n > 1) {
int m = people[0].password;
printf("Round %d:\n", people[0].id);
// 打印所有人
for (int i = 0; i < n; i++) {
printf("%d ", people[i].id);
}
printf("\n");
for (int i = 0; i < n; i++) {
if (i == m - 1) {
// 出列并调整数组
Person temp = people[m - 1];
people[m - 1] = people[n - 1];
people[n - 1] = temp;
free(&temp); // 释放临时存储的空间
n--;
} else {
people[i].password++;
}
}
}
// 输出最后剩下的那个人
printf("Last person remaining: Person %d\n", people[0].id);
free(people); // 游戏结束后释放数组
}
int main() {
int T;
scanf("%d", &T);
for (int t = 0; t < T; t++) {
int n;
scanf("%d", &n);
Person *currentPeople = inputAndCreateArray(n);
playGame(currentPeople, n);
}
return 0;
}
```
这个程序首先读取测试案例数量,然后对每个测试案例,读取人数并创建对应的人员数组,接着执行报数游戏,最后输出结果并清理动态分配的内存。
阅读全文