输入:
输入文件中有多组case。每一组case第一行包含一个整数N(1 <= N <= 1000),表示队员的人数。接下来的N行包含2个值:字符串name(长度不超过64)和整数id(1 <= id <= N),表示队员的名字和他(她)的号码, name 和 id之间有一个空格隔开, id是唯一的。 接下来那行包含一个整数K(0 <= K <= (2^31-1)),在接下来的K行中,每一行包含一个整数x(1 <= x <= 1000),表示随机产生的id号。
输出:
对应最后K行的每一个id号,每一行输出队员的name,要是这个id对应的name不存在,输出 "void";
输出中每两个case之间用一个空行格开。
Sample Input:
5
SeedJYH 1
Php 2
half 3
rene 4
Heart 5
4
考虑到名字间有空格,用gets()来读入,再对字符串切分成name和id;
做这题时。可谓错误百出啊
#include<stdio.h>
#include<string.h>
char name[1010][1010]; //字符数组尽量开大一点
int main()
{
int id[1010],n,t,i,len,t_i,k,case_=0;
long x;
char temp[1010];
while(scanf("%d/n",&n)!=EOF) //去换行符
{
if(case_++)
printf("/n"); //没注意到
for(i=0;i<1010;i++)
id[i]=0;
for(k=1;k<=n;k++) //变量k一直用i,一直出现灵异事件
{
gets(temp);
len=strlen(temp);
for(i=len-1;i>=0;i--)
if(temp[i]==' ')
break;
t_i=i;
t=0;
i++;
for(;i<len;i++)
t=t*10+temp[i]-'0';
id[t]=1;
temp[t_i]='/0';
strcpy(name[t],temp);
}
scanf("%ld",&x);
for(i=1;i<=x;i++)
{
scanf("%d",&t);
if(id[t]) //变量t一直用成i,一直WA
printf("%s/n",name[t]);
else
printf("void/n");
}
}
return 0;
}