下午不想复习,会来宿舍刷了会ACM题。其实是第一次提交ACM试题。早都指到ACM比赛也很想参加,可是大一大二都在忙着看课本没有怎么花时间搞ACM,最近重温C语言加上有段时间没写程序了,突然心血来潮ACM了一把。几个小时还是有收获的。
主要是有一道题:
查找学生信息
-
题目描述:
-
输入N个学生的信息,然后进行查询。
-
输入:
-
输入的第一行为N,即学生的个数(N<=1000)接下来的N行包括N个学生的信息,信息格式如下:01 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 19然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:02030104
-
输出:
-
输出M行,每行包括一个对应于查询的学生的信息。如果没有对应的学生信息,则输出“No Answer!”
-
样例输入:
-
4 01 李江 男 21 02 刘唐 男 23 03 张军 男 19 04 王娜 女 19 5 02 03 01 04 03
-
样例输出:
-
02 刘唐 男 23 03 张军 男 19 01 李江 男 21 04 王娜 女 19 03 张军 男 19
-
来源:
- 2003年清华大学计算机研究生机试真题 答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7793-1-1.html
1、c里是没有new关键字的!那个东西是c++的。
struct stu
{
char id[5];
char name[12];
char sex[4];
int age;
};
struct stu *s;
int selNum;
scanf("%d",&stuNum);
s= new (struct stu[stuNum]);
{
char id[5];
char name[12];
char sex[4];
int age;
};
struct stu *s;
int selNum;
scanf("%d",&stuNum);
s= new (struct stu[stuNum]);
在c里面是错误的。
2、关于数组大小。
struct stu
{
char id[5];
char name[12];
char sex[4];
int age;
};
这样定义是出错,结果把数组大小调大就可以了。
3、题目不是很难,就是要注意细节。
睡觉了!
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
struct stu
{
char id[MAX_LEN];
char name[MAX_LEN];
char sex[MAX_LEN];
int age;
};
struct stu * selectStu(char *id,struct stu *s);
int stuNum;
int main(void)
{
struct stu *s;
struct stu *mystu;
int selNum;
char selId[5];
int i;
scanf("%d",&stuNum);
s= (struct stu *)calloc(stuNum,sizeof(struct stu));
for (i=0;i<stuNum;i++)
{
scanf("%s%s%s%d",s[i].id,s[i].name,s[i].sex,&(s[i].age));
}
scanf("%d",&selNum);
for (i=0;i<selNum;i++)
{
scanf("%s",selId);
mystu = selectStu(selId,s);
if (mystu==NULL)
{
printf("No Answer!\n");
}
else
{
printf("%s %s %s %d\n",mystu->id,mystu->name,mystu->sex,mystu->age);
}
}
free(s);
return 0;
}
struct stu * selectStu(char *id,struct stu *s)
{
int i;
for (i=0;i<stuNum;i++)
{
if (!strcmp(id,s[i].id))
{
return &s[i];
}
}
return NULL;
}
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
struct stu
{
char id[MAX_LEN];
char name[MAX_LEN];
char sex[MAX_LEN];
int age;
};
struct stu * selectStu(char *id,struct stu *s);
int stuNum;
int main(void)
{
struct stu *s;
struct stu *mystu;
int selNum;
char selId[5];
int i;
scanf("%d",&stuNum);
s= (struct stu *)calloc(stuNum,sizeof(struct stu));
for (i=0;i<stuNum;i++)
{
scanf("%s%s%s%d",s[i].id,s[i].name,s[i].sex,&(s[i].age));
}
scanf("%d",&selNum);
for (i=0;i<selNum;i++)
{
scanf("%s",selId);
mystu = selectStu(selId,s);
if (mystu==NULL)
{
printf("No Answer!\n");
}
else
{
printf("%s %s %s %d\n",mystu->id,mystu->name,mystu->sex,mystu->age);
}
}
free(s);
return 0;
}
struct stu * selectStu(char *id,struct stu *s)
{
int i;
for (i=0;i<stuNum;i++)
{
if (!strcmp(id,s[i].id))
{
return &s[i];
}
}
return NULL;
}
转载于:https://blog.51cto.com/lsabcd/861429