gpt4 book ai didi

php - 在将 Python 代码转换为 PHP 时发现一个逻辑错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:30 25 4
gpt4 key购买 nike

输入 7|12|1|14|2|13|8|11|16|3|10|5|9|6|15|4 通过 PHP 代码返回 0 ,而 1 通过 Python 代码:1 表示 4x4 幻方的和相同,而 0 表示相反。 Python代码是正确的。

PHP 代码的问题似乎出在函数 divide 的 for 循环中,因为 PHP 给出了太多的总和。

PHP 代码的逻辑与 Python 有何不同

PHP

$data = "7|12|1|14|2|13|8|11|16|3|10|5|9|6|15|4";
$array = explode("|", $data);

# Calculate the unique sums of the four figures
# @return array int
function divide ( $array ) {
$sum = array_map('array_sum', array_chunk($array, 4));
$apu_a = array();
for ( $i = 0; $i < count( $sum ); $i++ ) {
if ( $i % 5 == 0 )
$apu_a []= $array[$i];
}
$sum []= array_sum( $apu_a );

$apu_a = array();
for ( $i = 0; $i < count( $sum ); $i++ ) {
if ( $i % 3 == 0 and $i != 15 and $i != 0 )
$apu_a []= $array[$i];
}
$sum []= array_sum( $apu_a );

$result = array_unique($sum);
return $result;
}

python

data = "7|12|1|14|2|13|8|11|16|3|10|5|9|6|15|4"
lista = map(int,data.split("|"))

def divide( lista ):
summat = [sum(lista[i:i+4]) for i in range(0,len(lista),4)]
summat += [sum(lista[0::5]) for i in range(0, len(lista), 16)]
summat += [sum(a for i,a in enumerate(lista) if i %3==0 and i != 15 and i != 0)]
return set(summat)

最佳答案

问题出在您的 PHP 行中:

for ( $i = 0; $i < count( $sum ); $i++ ) {

你想要:

for ( $i = 0; $i < count( $array ); $i++ ) {

在两个地方都修正它,你就会得到正确的答案。

顺便说一句:您只检查主对角线,但您也可以检查其他环绕对角线,正如 Greg 指出的那样,您永远不会对列求和。

关于php - 在将 Python 代码转换为 PHP 时发现一个逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1693945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com