我正在尝试解决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
答案 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);