喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
     
标题: [讨论] 出个题大家玩玩  
 
太阳雨
高级会员
Rank: 4
船长



UID 29985
精华 0
积分 729
帖子 880
金钱 729 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2004-7-10
来自 广州
状态 离线
[广告]: 代充Paypal帐号美元
出个题大家玩玩

这是儿时常玩的一个扑克游戏:玩法就是取同一花色的13张牌,排成一个序列,
然后取一张放到最后,发一张,再取一张放最后,再发一张,一直到所有牌发完,要求发出的牌的顺序是A,2,3...K
这个题的答案是:
7,A,Q,2,8,3,J,4,9,5,K,6,10
开始时,7放最后,发出A,变成Q,2,8,3,J,4,9,5,K,6,10,7
再把Q放到后面,发出2,变成8,3,J,4,9,5,K,6,10,7,Q
一直这样直到K(有点像若瑟夫环)

现在要玩的是算法题,共两个题目:

1)写出一个函数,接收一个大于3的正整数,返回符合上述要求的序列(可以是数组或字串)
例如:
func(4) = 4,1,3,2
func(5) = 3,1,5,2,4

2)写一个函数,接受一个1)生成的序列,按上述发牌方式,列出发牌顺序,也就是验证1)生成的结果是否正确
如:
$re = func(4); //$re = '4,1,3,2'
valid($re);
//valid将会打印以下信息
1 -> 3,2,4
2 -> 4,3
3 -> 4
4




PHPec开发框架(www.phpec.com)
2007-9-15 10:22 PM#1
查看资料  Blog  发短消息  QQ  顶部
 
kuco
高级会员
Rank: 4
一半会员


UID 66126
精华 0
积分 954
帖子 962
金钱 907 喜悦币
威望 0
人脉 47
阅读权限 50
注册 2005-8-23
来自 上海
状态 离线
[广告]: 代充Paypal帐号美元


<?php
//引玉
function func($num=''$resultArr='') {
    if(
$num==&& $resultArr=="") {
        return 
$num;
    }
    if(
$resultArr == "") {
        
$resultArr[] = $num;
    }else {
        
array_unshift($resultArr$num);
        
$cnt count($resultArr);
        
array_unshift($resultArr$resultArr[$cnt-1]);
        unset(
$resultArr[$cnt]);
        if(
$num==1) {
            return 
implode(","$resultArr);
        }
    }
    return 
func($num-1$resultArr);
}

function 
valid($str$dataArr='') {
    
$tmpArr explode(","$str);
    
$cnt count($tmpArr);
    if(
$cnt==1) {
        echo 
$tmpArr[0]."<br>";
        
$dataArr[] = $tmpArr[0];
        return 
$dataArr;
    }else {
        
$tmpArr[] = $tmpArr[0];
        
array_shift($tmpArr);
        echo 
$tmpArr[0]." -> ";
        
$dataArr[] = $tmpArr[0];
        
array_shift($tmpArr);
        echo 
implode(","$tmpArr)."<br>";
        return 
valid(implode(","$tmpArr), $dataArr);
    }
}


echo 
$str func(13);
echo 
"<br>";
$dataArr valid($str);
echo 
"<br>";
print_r($dataArr);


exit;
?>




阿里妈妈再掀疯狂采购风,急召天下站长,新加入站点3天内一定采购!
2007-9-16 12:29 PM#2
查看资料  Blog  发短消息  顶部
 
guo664
金牌会员
Rank: 6Rank: 6


UID 74604
精华 0
积分 2389
帖子 300
金钱 2389 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2006-6-7
状态 离线
[推荐阅读] 急聘php程序员2名
这个叫什么游戏的呀  顶一下
2007-9-16 02:33 PM#3
查看资料  Blog  发短消息  顶部
 
太阳雨
高级会员
Rank: 4
船长



UID 29985
精华 0
积分 729
帖子 880
金钱 729 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2004-7-10
来自 广州
状态 离线
[推荐阅读] 又被删了
有其它解法的吗?



PHPec开发框架(www.phpec.com)
2007-9-17 09:09 AM#4
查看资料  Blog  发短消息  QQ  顶部
 
sxpo
中级会员
Rank: 3Rank: 3


UID 93812
精华 0
积分 205
帖子 308
金钱 205 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2007-6-11
状态 离线
[推荐阅读] 【招聘】上海维西网络科技有限公司(VeryCD)
挺有意思的 我也来一个:

<?php
/**
 **得到数组
**/
function getSolution($num){
    if (!
is_int($num))//参数检查..确认是否为整数,是否需要大于0等等
        
return;
    
$arr = array();//初始化变量
    
for ($i 0;$i<$num;$i++)//对数组进行处理
    
{
        
$arr[] = $num $i;
        if(
$i>0){
            
$arr[] = $arr[0];
            
array_shift($arr);
        }
    }
    
krsort($arr);
    return 
array_values($arr);//返回数组
    //return implode(',',$arr);//返回字符串
}
/**
 **验证数组是否正确
**/
function checkSolution($arr){
    
//参数验证,检查是否为数组,并且数组里面有参数
    
if (!is_array($arr)&&!empty($arr))
        return;
    
$num count($arr);
    for (
$i 0;$i<$num;$i++)
    {
        if (
$i == $num){
            echo 
$i;
            return;
        }
        
$arr[] = $arr[0];
        
array_shift($arr);
        
array_shift($arr);
        echo 
$i+1,' -> ',implode(',',$arr),'<br />';
    }
}

checkSolution(getSolution(13));
/**
输出:

1 -> 12,2,8,3,11,4,9,5,13,6,10,7
2 -> 8,3,11,4,9,5,13,6,10,7,12
3 -> 11,4,9,5,13,6,10,7,12,8
4 -> 9,5,13,6,10,7,12,8,11
5 -> 13,6,10,7,12,8,11,9
6 -> 10,7,12,8,11,9,13
7 -> 12,8,11,9,13,10
8 -> 11,9,13,10,12
9 -> 13,10,12,11
10 -> 12,11,13
11 -> 13,12
12 -> 13
13 -> 

**/
?>




拥抱真是个奇怪的东西,明明靠的那么近,却......
2007-9-17 09:52 PM#5
查看资料  发短消息  QQ  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.032587 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP