汝欠咱的一生
关于拼音输入法的问题。

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

来打我呀
好厉害的样子哦
展开Biu

好厉害的样子哦..

[查看全文]
汝欠咱的一生
本帖最后由
展开Biu

本帖最后由 汝欠咱的一生 于 2013-5-21 12:45 编辑

foodszhu 发表于 2013-5-21 12:19

服务器端可能用utf8存。。一个汉字长度就是3了。

服务器是linux。不知道是不是utf8存的。

[查看全文]
foodszhu
服务器端可能用
展开Biu

服务器端可能用utf8存。。一个汉字长度就是3了。

[查看全文]
汝欠咱的一生
字符串存
展开Biu

现在用 字符串存,然后读取指定下标。 服务器判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]

[查看全文]
汝欠咱的一生
之前用链表挨个存
展开Biu

之前用链表挨个存。然后果然超时了。

[查看全文]