主题:求助高手们呀
百度语言翻译机
百度语言翻译机
时限 1s
百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。
为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语和专有名词翻译成日常语言。
输入数据:
输入数据包含三部分
1. 第一行包含一个整数 N ( N<=10000 ),表示总共有多少个缩率语的词条。
2. 紧接着有 N 行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩率语(仅包含大写英文字符,长度不超过 10 ),第二个字符串为日常语言(不包含空格,长度不超过 255 ) .
3. 从第 N+2 开始到输入结束为包含缩略语的相关文档。(总长度不超过 1000000 个字符)
输出数据:
输出将缩率语转换成日常语言的文档。(将缩率语转换成日常语言,其他字符保留原样)
#include <stdio.h>
#include <string.h>
struct DATA{
char sl[11];
char rc[256];
};
struct DATA Data[10000];
int N;
char word[1000000], nword[1000000000];
int compare(char *word, char *sl)
{
int i = 0;
while(1)
{
if(sl[i] != word[i]) return 0;
++i;
if(sl[i] == 0) return i;
if(word[i] == 0) return 0;
}
}
int find(int i)
{
int j, l = 0, r, f;
for(j = 0; j != N; ++j)
{
r = compare(word + i, Data[j].sl);
if(r > l)
{
l = r;
f = j;
}
}
if(l == 0) return -1;
else return f;
}
void main()
{
int i, j, r, l;
scanf("%d", &N);
for(i = 0; i != N; ++i)
{
scanf("%s %s", Data[i].sl, Data[i].rc);
}
fflush(stdin);
gets(word);
i = 0;
j = 0;
while(word[i] != 0)
{
r = find(i);
if(r == -1)
{
nword[j] = word[i];
++j;
++i;
}
else
{
strcpy(nword + j, Data[r].rc);
j += strlen(Data[r].rc);
i += strlen(Data[r].sl);
}
}
nword[j] = 0;
puts(nword);
}
谁可以帮我解答一下:
问题分析:通过对该问题的分析得出需要设计的算法以及必须设计的变量。
程序模块设计:写出设计该程序所必须的程序模块以及每个模块所须完成的功能,输入输出参数以 及每个参数的含义。
程序流程设计:绘出每个模块的程序流程。
[em1]
百度语言翻译机
时限 1s
百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。
为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语和专有名词翻译成日常语言。
输入数据:
输入数据包含三部分
1. 第一行包含一个整数 N ( N<=10000 ),表示总共有多少个缩率语的词条。
2. 紧接着有 N 行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩率语(仅包含大写英文字符,长度不超过 10 ),第二个字符串为日常语言(不包含空格,长度不超过 255 ) .
3. 从第 N+2 开始到输入结束为包含缩略语的相关文档。(总长度不超过 1000000 个字符)
输出数据:
输出将缩率语转换成日常语言的文档。(将缩率语转换成日常语言,其他字符保留原样)
#include <stdio.h>
#include <string.h>
struct DATA{
char sl[11];
char rc[256];
};
struct DATA Data[10000];
int N;
char word[1000000], nword[1000000000];
int compare(char *word, char *sl)
{
int i = 0;
while(1)
{
if(sl[i] != word[i]) return 0;
++i;
if(sl[i] == 0) return i;
if(word[i] == 0) return 0;
}
}
int find(int i)
{
int j, l = 0, r, f;
for(j = 0; j != N; ++j)
{
r = compare(word + i, Data[j].sl);
if(r > l)
{
l = r;
f = j;
}
}
if(l == 0) return -1;
else return f;
}
void main()
{
int i, j, r, l;
scanf("%d", &N);
for(i = 0; i != N; ++i)
{
scanf("%s %s", Data[i].sl, Data[i].rc);
}
fflush(stdin);
gets(word);
i = 0;
j = 0;
while(word[i] != 0)
{
r = find(i);
if(r == -1)
{
nword[j] = word[i];
++j;
++i;
}
else
{
strcpy(nword + j, Data[r].rc);
j += strlen(Data[r].rc);
i += strlen(Data[r].sl);
}
}
nword[j] = 0;
puts(nword);
}
谁可以帮我解答一下:
问题分析:通过对该问题的分析得出需要设计的算法以及必须设计的变量。
程序模块设计:写出设计该程序所必须的程序模块以及每个模块所须完成的功能,输入输出参数以 及每个参数的含义。
程序流程设计:绘出每个模块的程序流程。
[em1]