欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

USACO 1.2.3 Name That Number

程序员文章站 2022-06-10 18:45:51
...

USACO 1.2.3 Name ThatNumber 题意:有好多头奶牛,它们每一头都有一个编号,每个数字分别对应三个字母,每个数字从它对应的字母中挑一个出来组成一个单词,给定一个词典,看如果这个单词在词典中是存在的,就输出,如果存在多个这样的单词,按照字母表的顺

USACO 1.2.3 Name ThatNumber

题意:有好多头奶牛,它们每一头都有一个编号,每个数字分别对应三个字母,每个数字从它对应的字母中挑一个出来组成一个单词,给定一个词典,看如果这个单词在词典中是存在的,就输出,如果存在多个这样的单词,按照字母表的顺序输出。

打印出所有可能的单词然后去比较,觉得效率有问题。出题者的用意明显是让我们反过来做,将词典里的单词转换成数字然后和给定的数字比较,因为给的词典里的单词都是按照字母表顺序排列的,而且数字和字母之间存在明显关系。

细节+代码:

/*  
ID: 15257142  
LANG: C  
TASK: namenum 
*/  
#include
#include
int main(){
	freopen("namenum.in", "r", stdin); //在我看来输入输出是这道题目全部价值所在。
	char num[20],a[30],b[20];
	int m,ma,i,f,k;
	scanf("%s",num);
	m = strlen(num)-1;
	freopen("dict.txt", "r", stdin); //!
	freopen("namenum.out", "w", stdout); //!
	f = 0;
	while(scanf("%s",a)!=EOF){
		ma = strlen(a)-1;
		if(m!=ma)
			continue;
		for(i = 0;i'Q') //是没有'Q'的,那么……
				k = (a[i]-'B')/3;
			else
				k = (a[i]-'A')/3;
			b[i] = k+'2';
		}
		b[ma+1] = '\0';
		if(strcmp(b,num)==0){
			printf("%s\n",a);
			f = 1;
		}
	}
	if(f==0)
		printf("NONE\n");
	fclose(stdin);
	fclose(stdout);
	return 0;
}