Home  >  Article  >  Backend Development  >  新人请教一个该如何写*算法

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

WBOY
WBOYOriginal
2016-06-23 14:01:51811browse

主要原因:

目前在学习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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn