1277 - C语言11.13

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等于这个年龄,则将所有符合要求的节点删去。

题目输入

第一行有一个整数n,表示链表中的节点个数。保证n不超过100。

之后的n行每行有4个用空格隔开的部分,分别为学号(正整数)、姓名(长度不超过20且不包含空格的字符串)、性别(字符m或f)、年龄(正整数)。
最后一行有一个整数age,表示需要删除的节点年龄。

题目输出

首先输出链表最终剩下的节点个数k。

在接下来的k行,每行输出4个用空格隔开的部分,分别为学号、姓名、性别和年龄,与输入格式相同。
请注意行尾输出换行。

输入/输出样例

输入格式

5
101 Aaa m 25
102 Bbb f 26
103 Ccc m 26
104 Ddd f 24
105 Eee m 25
26

输出格式

3
101 Aaa m 25
104 Ddd f 24
105 Eee m 25

C语言解答

#include <stdio.h>
typedef struct student{
	int id;
	char name[20];
	char sex[2];
	int age;
	int flag;
}student;
int main(){
	int n,i,tmp,cnt;
	student st[100];
//	freopen("1.txt","r",stdin);
	while (scanf("%d",&n)==1)
	{
		for (i=0;i<n;i++)
		{
			scanf("%d %s %s %d",&(st[i].id),st[i].name,st[i].sex,&(st[i].age));
			st[i].flag=1;
		}
		scanf("%d",&tmp);
		cnt=n;
		for (i=0;i<n;i++)
		{
			if (st[i].age==tmp)
			{
				st[i].flag=0;
				cnt--;
			}
		}
		printf("%d\n",cnt);
		for (i=0;i<n;i++)
		{
			if (st[i].flag)
			{
				printf("%d %s %s %d\n",st[i].id,st[i].name,st[i].sex,st[i].age);
			}
		}
	}
//	fclose(stdin);
	return 0;
}

C++解答

#include <stdio.h>
#include <stdlib.h>
struct node {
	int num;
	char name[21], sex;
	int age;
	struct node * next;
};
int main() {
	struct node *head, *tail, *p, *pa;
	int n, i, del_age;
	scanf("%d", &n);
	/* 读入链表中的n个人的信息 */
	head = tail = NULL;
	for (i = 0;i < n;i++) {
		p = (struct node *)malloc(sizeof(struct node));
		scanf("%d %s %c %d", &p->num, p->name, &p->sex, &p->age);
		if (head == NULL) {
			head = tail = p;
		} else {
			tail->next = p;
			tail = p;
		}
	}
	tail->next = NULL;
	scanf("%d", &del_age);
	/* 遍历链表的每一个节点,判断节点的年龄是否与要删除的相等 */
	pa = p = head;
	while (pa != NULL) {
		if (pa->age == del_age) {
			if (pa == head) {
				head = pa->next;
				free(pa);
				pa = p = head;
			} else {
				p->next = pa->next;
				free(pa);
				pa = p->next;
			}
			n--;
		} else {
			p = pa;
			pa = pa->next;
		}
	}
	/* 将处理后的链表进行输出 */
	printf("%d\n", n);
	p = head;
	while (p != NULL) {
		printf("%d %s %c %d\n", p->num, p->name, p->sex, p->age);
		p = p->next;
	}
	return 0;
}

Java解答



import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {
   private static Scanner s = new Scanner(System.in) ;
   
   public static void main(String[] args) {
	  int n = s.nextInt() ;
	  List<Student> list = new LinkedList<Student>() ;
	  List<Student> temp = new LinkedList<Student>() ;
	  if (n<=100) {
		  for (int i = 0; i < n; i++) {
			 int num = s.nextInt() ;
			 String name = s.next() ;
			 String sex = s.next() ;
			 int age = s.nextInt() ;
			 Student s = new Student(num, name, sex, age) ;
			 list.add(s) ;
		  }
		  int a = s.nextInt() ;
		  for (Student student : list) {
			 temp.add(student) ;
		  }
		  for (Student stu : temp) {
			 if(stu.age==a){
				 list.remove(stu) ;
			 }
		  }
		  System.out.println(list.size());
		  for (Student student : list) {
			  System.out.println(student.num+" "+student.name+" "+student.sex+" "+student.age); 
		  }
	  }
   }
}

class Student{
	int num ;
	String name ;
	String sex ;
	int age ;
	public Student(int num, String name, String sex, int age) {
		this.num = num;
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	
}