热搜:NVER node 开发 php

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

2024-09-04 12:55:01
新人请教一个该如何写*算法

主要原因:

目前在学习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 "
"; } else{ echo "
"; } } } }?>


<?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 '
'; }?>


回复讨论(解决方案)

你这是求 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 "
"; } else{ echo "
"; } } }}
武汉 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 "
"; } else{ echo "
"; } } }}
武汉 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