【发布时间】:2017-12-01 15:56:14
【问题描述】:
bool testMagicSquare(string str) {
int length, sum = 0;
length = strlen(str);
for (int i = 0; i < length; i++) {
sum = sum + str[i];
}
if (sum == 120) {
return 1;
}
else return 0;
}
我的任务是从文本文件中获取一个十六进制正方形,测试它是否是“魔术正方形”。如果是,请在另一个文本文件中打印正方形以保存它。 获取文本文件并打印到文件正在工作,但我坚持测试。
有什么想法吗?
十六进制字符串示例:8 3 4 f 5 e 9 2 b 0 7 c 6 d a 1
【问题讨论】:
-
如果正方形是基于一个数字的十六进制数字,您可以像在代码中那样对 ASCII 值求和!要验证是否是幻方,您可以参考 stackoverflow.com/questions/47555212/… 。此代码用于十进制数字,但会指示您如何验证数字是否代表幻方。
-
神奇的唯一条件是120的总和?
-
将十六进制的
char或str[i]转换为“0-9a-fA-F”的值。int val = strtol((char []){str[i], '\0'}, NULL, 16); -
或者保留为 ASCII 并使用
if (length == 16 && sum == '0'+'1'+... + 'f')。不过,后一种方法可能会被愚弄 -
总是 4x4 的“魔方”?