|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
宝藏地图的每一个坐标点均有两行字符串,你需要将两个字符串均以下列方式转换成一个数字,最终数字就是字符串中所有字母的积,其中'A'是1,'Z'是26。例如,USACO就是21*19*1*3*- [/code]15=17955
- 。如果两个字符串转换为数字后mod 47的值相等,此处就可以行走,即输出“GO”,否则就必须呆在原地等待救援,即输出“STAY”。
- 输入描述
- 第1行:第一个长度为1~6的大写字母串。
- 第2行:第二个长度为1~6的大写字母串。
- 输出描述
- 输出“GO”或“STAY”。
- [code]#include<stdio.h>
- #include<math.h>
- int main()
- {
- char a,b;int s1=1,s2=1;
- while(scanf("%c",&a)!='\n')
- {
- a=fmod(a-64,47);
- s1*=a;
- }
- while(scanf("%c",&b)!='\n')
- {
- b=fmod(b-64,47);
- s1*=(b%47);
- }
- if(s1==s2) printf("GO");
- else printf("STAY");
- }
复制代码
缩短代码运行时间的方法有很多,以下列举了几种可能的优化方案:
1. 避免重复计算:在这道题中,你需要计算两个字符串中所有字母的积,可以先把一个字符串的积计算出来,再计算另一个字符串的积,并与前一个积进行比较,这样就避免了重复计算。
2. 减少循环次数:在这道题中,循环次数和字符串长度有关,可以在循环时使用字符串长度作为循环结束条件,避免不必要的计算。
3. 尽量使用整型运算:在这道题中,需要计算两个字符串的积并进行模运算,可以先将每个字符转换为对应的数字,然后用整型变量累加积和模运算结果,这样可以避免浮点运算和模运算的性能损失。
以下是修改后的代码,其中使用了上述几种优化方法:
- #include<stdio.h>
- int main() {
- char a, b;
- int s1 = 1, s2 = 1;
- // 计算第一个字符串的积
- while (scanf("%c", &a) != '\n') {
- s1 = (s1 * (a - 'A' + 1)) % 47;
- }
- // 清除缓冲区
- getchar();
- // 计算第二个字符串的积
- while (scanf("%c", &b) != '\n') {
- s2 = (s2 * (b - 'A' + 1)) % 47;
- }
- if (s1 == s2) {
- printf("GO");
- } else {
- printf("STAY");
- }
- return 0;
- }
复制代码
希望对你有所帮助!
球一个最佳答案谢谢啦!这对我非常重要!  
|
|