-3

我正在尝试解决USACO 培训,“你的旅程在这里”问题可以用这个算法来解决:

#include <iostream>
#include <conio.h>
using namespace std;

int Calculated(char * calc_me);

int main() {
    char * comet_name = (char*)calloc(sizeof(char), 7);
    if (comet_name == NULL) {return 0;}
    char * group_name = (char*)calloc(sizeof(char), 7);
    if (group_name == NULL) {free(comet_name); return 0;}

cout << "Enter the name of the comet: ";
cin >> comet_name;
cout << "Enter the name of the group: ";
cin >> group_name;

if ((Calculated(comet_name) % 47) == (Calculated(group_name) % 47)) {
   cout << "GO";
}
else {
     cout << "STAY";
}
 free (group_name);
 free (comet_name);
 return 0;
}

int Calculated (char * calc_me) {
    int i;
    int total = 1;
    for (i = 0; i < 7; i++) {
        if (calc_me[i] == '0') {break;}
        total *= calc_me[i] - 64;
    }
    getch();
    return total;

}

我试图用do-while循环更改for循环,这是我的代码,所以我用do-while替换了它,它不起作用,谁能告诉我我做错了哪一部分?

#include <iostream>
#include <conio.h>
using namespace std;

int Calculated(char * calc_me);

int main() {
    char * comet_name = (char*)calloc(sizeof(char), 7);
    if (comet_name == NULL) {return 0;}
    char * group_name = (char*)calloc(sizeof(char), 7);
    if (group_name == NULL) {free(comet_name); return 0;}

    cout << "Enter the name of the comet: ";
    cin >> comet_name;
    cout << "Enter the name of the group: ";
    cin >> group_name;

    if ((Calculated(comet_name) % 47) == (Calculated(group_name) % 47)) {
       cout << "GO";
    }
    else {
         cout << "STAY";
    }
     free (group_name);
     free (comet_name);
     return 0;
}

int Calculated (char * calc_me) {
    int i;
    int total = 0;
    do
    {
        total *= calc_me[i] - 64;

        i += 1;

    }while(i < 7);
    getch();
    return total;

}

这是示例输入:COMETQ HVNGAT

GO

ABSTAR USACO

STAY 
4

3 回答 3

3
if (calc_me[i] == '0') {break;}

应该读

if (calc_me[i] == '\0') {break;}

并且您的 do-while 版本中缺少该条件,以及i.

但主要问题是您将初始值total从 1 更改为 0:

 int total = 0;

所以这条线

 total *= calc_me[i] - 64;

不断将零乘以下一个值。

于 2013-02-25T21:39:48.400 回答
2

啊!!找到了!!

您已初始化total to 0. 因此,每次乘法都变为 0,因此您的函数始终返回 0。

将您的总变量初始化为1,它应该可以工作。

于 2013-02-25T21:39:04.240 回答
0

在下面的代码片段中,您需要先i使用一个值进行初始化,然后才能执行i += 1. 您在 for 循环的 for 语句中执行此操作,同样您也需要为 do-while 循环执行此操作。

int i = 0;  // initialize to 0
int total = 0;
do
{
    total *= calc_me[i] - 64;

    i += 1;

}while(i < 7);
于 2013-02-25T21:20:28.970 回答