Xidian Online Judge WebBoard
[ New Thread ]
Problem 1292 >> World Game,c编程一直答案错误跪求帮看
17019110016 @ 2018-05-23 12:28:48
[ Quote ] [ Edit ] [ Delete ] 1#
是辣鸡萌新,可能代码写的比较麻烦……望见谅
用的是visual studio 2013,dev也试了一下感觉都可以过,但是一直显示答案错误

/*
题目描述
有一款英语练习游戏是这样的,每次会给出一些字母,然后需要你从中拼出一个最长的英文单词。
虽然williamchen的英语非常差,但是他现在搞到了一本英语词典,他只需要在词典里找出一个最长的符合条件的字母即可。
现在你需要写一个程序来帮助他完成这个任务。

输入
包含多组测试数据,每组数据开始一行包含不超过20个字母,表示游戏给出的字母。
接下来是一行一个数字N(1 <= N <= 1000)
接下来N行,每行一个字符串表示词典中的单词,单词长度不会超过10。

输出
每组数据输出一行,表示最长可能拼出的单词长度,如果一个单词都拼不出,那就输出0。
*/

C语言:
#include<stdio.h>
#include<malloc.h>
#include<string.h>

//用来检查单词是否符合要求的长度,符合要求时返回单词的长度,否则返回0
int vaild(char* s1, char* s2);

int main()
{
//存放多组输入数据答案的数组
int max_answer[20] = { 0 };

int n = 0;

//计算一共读入的数据组数
int cnt = 0;

do{
//读入初始的乱序字母排列
char *str_initial = NULL;
str_initial = (char*)malloc(sizeof(char) * 21);

if (str_initial)
{
gets(str_initial);

//读入所需的N行
int N = 0;
scanf("%d", &N);

//可能是为了消掉空格
getchar();

//循环读入字典中的单词
int j =0;
for (j = 0; j < N; j++)
{
char *str_dictionary = NULL;
str_dictionary = (char*)malloc(sizeof(char) * 11);

if (str_dictionary)
{
gets(str_dictionary);

//检查,计算长度并将最大的数值输入答案数组
if (vaild(str_initial, str_dictionary) > max_answer[cnt])
max_answer[cnt] = vaild(str_initial, str_dictionary);
}
free(str_dictionary);
}

free(str_initial);
}

//将答案数组指针移到下一位
cnt++;
} while (scanf("%d", &n) != EOF);

//读入结束时输出答案
for (int m = 0; m < cnt; m++)
{
printf("%d\n", max_answer[m]);
}
}


int vaild(char* s1, char* s2)
{
int length = 0;
length = strlen(s2);

char str[20];

int i = 0;
for (i = 0; i < 20; i++)
{
str[i] = s1[i];
}

for (i = 0; i < strlen(s2); i++)
{
char *p = strchr(str, s2[i]);
if (p)
{
*p = '0';
length--;
}
}

if (!length)
{
return strlen(s2);
}
else
{
return 0;
}
}
17131212946 @ 2018-05-31 20:08:53
[ Quote ] [ Edit ] [ Delete ] 2#
完全看不懂,首先 ACM 比赛很少使用动态内存分配,因为数据范围都是已知的,如果特定情况下确实需要动态分配一般就动用 STL 了。

getchar() 跳过换行存在隐患,如果出题人直接在 Linux 上使用了 Windows 的测试数据就会出错。建议尽量用 scanf("%s", <some ptr>) 读取字符串,
除非字符串包含空格。

这个多组数据结束条件很迷啊,直接判断第一个字符串读取成功与否不好吗? man 3 gets:
gets() returns s on success, and NULL on error or when end of file
occurs while no characters have been read.

题目说了数据组数不超过 20 吗?没有特殊情况处理一组输出一组即可。
[Top] [Previous Page] [Next Page]
Anything about the Problems, Please Contact Admin:admin
All Copyright Reserved 2010-2014 Xidian ACM Online Judge TEAM
GPL2.0 2003-2014 HUSTOJ Project TEAM