-3

私はUSACOトレーニングを解決しようとしています。「YourRideIsHere」の問題はこのアルゴリズムで解決できます。

#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;

}

forループをdo-whileループで変更しようとしています。これが私のコードなので、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

ただし、主な問題は、初期値をtotal1から0に変更したことです。

 int total = 0;

だからこの行

 total *= calc_me[i] - 64;

ゼロに次の値を掛け続けます。

于 2013-02-25T21:39:48.400 に答える
2

AH !! それを見つけた!!

を初期化し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 に答える