Input
首先输入一个拼音列表,每行以“拼音 汉字”的形式输入,比如“wo 我”表示“我”字的拼音是“wo”,会出现拼音相同的情况,比如“wo 我”,“wo 喔”,这时以他们出现的顺序为序号区分,即“wo”这个拼音的第一个字是“我”,第二个字是“喔”。
输入拼音列表以单独的一行“end”结束。
接下来输入若干行询问的拼音,每行以“拼音 序号n”的形式输入,比如“wo 1”。
输入的询问拼音以单独的一行“end”结束。
Output
对于每一行输入询问的拼音,输出一个该拼音的第n个中文(如果n大于该拼音下的中文数,那么就输出该拼音下的最后一个中文)。
如果输入的拼音不存在之前的拼音列表中,则输出单独的一行"NO"。
Sample Input
wo 我
wo 喔
ni 你
ni 泥
end
wo 1
ni 3
ta 2
end
Sample Output
我
泥
NO
现在用 字符串存,然后读取指定下标。 服务器判WA。求解。
[mw_shl_code=c,true]#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define max 1001
typedef struct Node
{
int data;
char en[max];
char cn[max*10];
struct Node *next;
}LNode,*List;
int List_add(List L,char *a)
{
int ok=0;
while(L->next!=NULL)
{
L=L->next;
if(strcmp(L->en,a)==0)
{
ok=1;
break;
}
}
if(ok==1)
{
char str[10];
scanf("%s",str);
strcat(L->cn,str);
}
else
{
List New=(LNode*)malloc(sizeof(LNode));
strcpy(New->en,a);scanf("%s",New->cn);
New->next=L->next;
L->next=New;
}
}
int List_show(List L,char *a)
{
int i=0,n;
char str[10];
scanf("%d",&n);
while(L->next!=NULL)
{
L=L->next;
if(strcmp(L->en,a)==0)
{
i=1;
int len=strlen(L->cn);
if(n>len/2)
str[0]=L->cn[len-2],str[1]=L->cn[len-1],str[2]='\0';
else
str[0]=L->cn[2*n-2],str[1]=L->cn[2*n-1],str[2]='\0';
printf("%s\n",str);return 0;
}
}
if(i==0)printf("NO\n");
}
int main()
{
List L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
char a[max];
while(scanf("%s",a)!=EOF)
{
if(strcmp(a,"end")==0)break;
List_add(L,a);
}
while(scanf("%s",a)!=EOF)
{
if(strcmp(a,"end")==0)break;
List_show(L,a);
}
return 0;
}
[/mw_shl_code]
[查看全文]
