> 백엔드 개발 > PHP 튜토리얼 > 新人请教一个该如何写*算法

新人请教一个该如何写*算法

WBOY
풀어 주다: 2016-06-23 14:01:51
원래의
888명이 탐색했습니다.

主要原因:

目前在学习PHP的过程,想考验一下自己制作一个足球比赛单循环的赛程表出来。

算法:

*算法
把队伍排列成2行(偶数队伍),固定第一行的第一个队伍,从第一行第二个队伍开始顺时针滚动。

但我在写代码的时候怎么也写不出来(可能是我也刚接触)

我所设想的写法应该是:

3层for循环,第一层是轮次,第二层是主队,第三层是客队。
进行for echo展示赛程表。

下面代码是我自己在研究过程中写出来的,跟我要的结果完全不一样啊,不知道怎么写了,希望PHP大牛帮忙!

<?php	$team = array('武汉','广州','北京','上海','四川','香港','台湾');	//var_dump($team);	$max = count($team);	//var_dump($max);	$teammax = $max - 1 ;	for ($i=0;$i<$max;$i++)	{		for ($o=0;$o<=$teammax;$o++)		{			if ($i == $o)			{				continue;			}				else			{			echo $team[$i] . ' vs ' . $team[$o];			if ($o == $teammax){				echo "<hr>";			}			else{			echo "<br/>";		}	}		}	}?>
로그인 후 복사


<?php	$team = array('1','2','3','4','5','6','7','8');	$max = count($team);	//var_dump($max);	$lunci = $max - 1;	//var_dump($lunci);	for ($i=0;$i<$lunci;$i++)	{		echo $team[$w] .' vs ' . $team[$b-$i];		echo '<br/>';	}?>
로그인 후 복사


回复讨论(解决方案)

你这是求 7 中取 2 的组合
按求组合的通用算法即可(精华区有相关代码)

规则看不太懂 能给个结果实例要你想要的结果展示出来吗 这样别人才能更好的知道你想要的结果是什么

自己研究的话,可以这样写

$team = array('武汉','广州','北京','上海','四川','香港','台湾');$max = count($team);$teammax = $max - 1 ;for ($i=0;$i<$max;$i++) {  for ($o=$i+1;$o<=$teammax;$o++) {    if ($i == $o) {      continue;    }else {      echo $team[$i] . ' vs ' . $team[$o];      if ($o == $teammax){        echo "<hr>";      } else{        echo "<br/>";      }    }  }}
로그인 후 복사
로그인 후 복사
武汉 vs 广州
武汉 vs 北京
武汉 vs 上海
武汉 vs 四川
武汉 vs 香港
武汉 vs 台湾
--------------------------------------------------------------------------------
广州 vs 北京
广州 vs 上海
广州 vs 四川
广州 vs 香港
广州 vs 台湾
--------------------------------------------------------------------------------
北京 vs 上海
北京 vs 四川
北京 vs 香港
北京 vs 台湾
--------------------------------------------------------------------------------
上海 vs 四川
上海 vs 香港
上海 vs 台湾
--------------------------------------------------------------------------------
四川 vs 香港
四川 vs 台湾
--------------------------------------------------------------------------------
香港 vs 台湾
--------------------------------------------------------------------------------

规则看不太懂 能给个结果实例要你想要的结果展示出来吗 这样别人才能更好的知道你想要的结果是什么

实力结果应该是
第一轮
也就是把
1234
5678
上下对阵
1523
6784

1652
7843

形成罗盘算法的运转(固定1 转动2~8)

自己研究的话,可以这样写

$team = array('武汉','广州','北京','上海','四川','香港','台湾');$max = count($team);$teammax = $max - 1 ;for ($i=0;$i<$max;$i++) {  for ($o=$i+1;$o<=$teammax;$o++) {    if ($i == $o) {      continue;    }else {      echo $team[$i] . ' vs ' . $team[$o];      if ($o == $teammax){        echo "<hr>";      } else{        echo "<br/>";      }    }  }}
로그인 후 복사
로그인 후 복사
武汉 vs 广州
武汉 vs 北京
武汉 vs 上海
武汉 vs 四川
武汉 vs 香港
武汉 vs 台湾
--------------------------------------------------------------------------------
广州 vs 北京
广州 vs 上海
广州 vs 四川
广州 vs 香港
广州 vs 台湾
--------------------------------------------------------------------------------
北京 vs 上海
北京 vs 四川
北京 vs 香港
北京 vs 台湾
--------------------------------------------------------------------------------
上海 vs 四川
上海 vs 香港
上海 vs 台湾
--------------------------------------------------------------------------------
四川 vs 香港
四川 vs 台湾
--------------------------------------------------------------------------------
香港 vs 台湾
--------------------------------------------------------------------------------

你好,版主,你这样的写法我写过,最终生成的结果和我想要的结果是不一样的。

我所想的是

第一轮
1234
5678
第二轮
1523
6784
第三轮
1652
7843
以此类推这样的算法0.0

$arr = array(4,3,2,1,5,6,7,8);
$round = 0; //设置轮次
$arr1 = array_merge($arr, $arr);
$round %= 8;
echo $arr1[$round],$arr1[$round+1],$arr1[$round+2],$arr1[$round+3];

这个意思?

$ar = array(1, 2, 3, 4, 5, 6, 7, 8);$len = count($ar);for($i=1; $i<$len; $i++) {  foreach(array_chunk($ar, $len/2) as $v) {    echo join('', $v), PHP_EOL;  }  $t = array_splice($ar, 1, 1);  $ar = array_merge($ar, $t);  echo PHP_EOL;}
로그인 후 복사
1234
5678

1345
6782

1456
7823

1567
8234

1678
2345

1782
3456

1823
4567

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿