用do while循环编写这个算法

时间:2013-02-25 21:18:48

标签: c++ algorithm for-loop do-while

我正在尝试解决USACO trainings,这个算法可以解决“你的骑在这里”的问题:

#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 

3 个答案:

答案 0 :(得分: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;

保持零乘以下一个值。

答案 1 :(得分:2)

AH !!找到了!!

您已初始化total to 0。因此,每个乘法变为0,因此您的函数总是返回0.

将您的总变量初始化为1,它应该有效。

答案 2 :(得分: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);