USACO比较好的一点是每道题都给了比较详细的背景叙述,让人感觉像是在解决生活中的实际问题一样。
由于题目很长,我只描述一下问题的核心:
给你两个长度最大为6的字符串,字符串中的字符只可能是26个大写英文字母。其中A可以用数字1表示,那么以此类推,Z就可以用26表示了。题目让你求解的是判断两个字符串中各自所有字母代表的数字的乘积再模47的余数是否相同,相同则输出GO,不同则输出STAY.
例如,字符串“COMETQ”代表的计算式为(3*15*13*5*20*17)%47 = 27;
字符串“HVNGAT”代表的计算式为(8*22*14*7*1*20)%47 = 27;
所以当输入以上两个字符时,输出的结果应为GO.
程序描述:
程序的思路非常简单,唯一的“技巧”可能就在于如何将大写字母转换成相应的数字,可用(ch - 'A' + 1)进行转换,不说了,下面直接上代码。
通过与答案对比,发现自己的代码风格不好,如没有检查fin,fout是否为空,而且计算取余的两段代码是一样的,也没放进函数里等等。