2013-02-25 102 views
-3

我试图解决USACO trainings,“您坐的是这里的”问题可以用这个算法来解决:写这个算法做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 = 1; 
    for (i = 0; i < 7; i++) { 
     if (calc_me[i] == '0') {break;} 
     total *= calc_me[i] - 64; 
    } 
    getch(); 
    return total; 

} 

我试着去改变与do-while循环循环,这是我的代码,所以我用do代替了它,它不起作用,任何人都可以提到我哪个部分我做错了?

#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

要求人们发现代码中的错误并不是特别有效。您应该使用调试器(或添加打印语句)来隔离问题,然后构造一个[最小测试用例](http://sscce.org)。 – 2013-02-25 21:20:02

+1

你能否提供样本输入和预期输出! – 2013-02-25 21:27:18

+0

@Robin问题更新 – n1kita 2013-02-25 21:28:31

回答

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

应该读

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

和条件从您的丢失,请-而版本,随着i初始化。

但主要的问题是,你从1变的total初始值为0:

int total = 0; 

所以这行

total *= calc_me[i] - 64; 

保持到下值乘以零。

+0

问题解决了谢谢 – n1kita 2013-02-25 21:43:46

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); 
+0

它不起作用 – n1kita 2013-02-25 21:21:41

+1

就是这样?它不起作用?没有其他信息?我该如何帮助你,只是“它不工作”。它是运行时还是编译错误?编译器说什么? – xbonez 2013-02-25 21:22:37

+1

你忘了“if(calc_me [i] =='0')break;” – JCash 2013-02-25 21:23:12

2

AH !!找到了!!您已初始化total to 0。所以,每一个乘法变为0,因此你的函数总是返回0.

初始化你的总变量为1它应该工作。

+0

我在我的代码之前做过 – n1kita 2013-02-25 21:42:40

+0

感谢问题解决 – n1kita 2013-02-25 21:44:14