求一个签到问题的算法

来源:百度知道 编辑:UC知道 时间:2024/05/28 02:13:58
为了统计每个学生去机房的情况,机房门口设有指纹签到系统,现在老师们需要机房的负责人向他们提供学生的签到情况,需要知道哪位学生一共签到多少次。
Input
有多组测试数据,对于每组测试数据
首先为一个整数n,(0 < n ≤ 20000),表示记录的条数。当n为0时,表示测试数据的结束,你不需要处理。
接下来为n个整数p,(0 < p ≤ 10000),p表示某学生的编号,p出现一次,表示编号为p的签到一次。
提示:有大量数据读入,建议使用C风格的scanf处理输入数据

Output
输出学生的签到情况,格式为:
ID: count
ID表示学生的编号,count表示其签到的次数,冒号和count之间有一个空格,对于每个学生输出一行,根据学生的编号从小到大顺序输出,对于一次也没有签到的学生不需要处理。
每组测试数据后输出一空行。

Sample Input
3 1 2 4
5 1 1 1 3 3
0

Sample Output
1: 1
2: 1
4: 1

1: 3
3: 2
input是自己输入的

留个脚印,下班回家做
问一句,你的Input是从文本文件读取的,还是用户直接输入的?

再问一句:
Sample Input
3 1 2 4
5 1 1 1 3 3
0
上面这个是一次性输入的,
还是输入3 1 2 4,出一个结果,
输入5 1 1 1 3 3,再出一个结果

//////////////////////////////////////////////////
以下代码已经在VC上编译运行确认了,你还是加些分吧,
还算比较复杂的。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

struct NODE
{
int ID;
int times;
NODE *next;
};

char *cur=NULL;
NODE *head=NULL,*p=NULL,*temp=NULL;

void init()
{
NODE *tmp=head;
while(tmp!=NULL)
{
tmp=head->next;
free(head);
head=tmp;
}

head=NULL;
p=NULL;
temp=NULL;
cur=NULL;
}

int getNum()
{
int num=0;

while(*cur==' ') cur++;

while((*cur!=' ')&&(*cur!=NULL))
{
if(num==0) num+=*cur-'0';
else