农民狼羊菜问题php代码

代码如下

<?php
//农夫 狼 羊 菜
/*
每次的操作可能是
    a.-农夫-另一个元素
    b.+农夫+另一个元素
    c.-农夫
    d.+农夫

A是农夫
B是狼
C是羊
D是菜
*/
$leftBank = 'ABCD';
$rightBank = '';
//设定函数检查是否会用餐
function ifEat($str) {
    //true表示会发生用餐
    //没有羊肯定为false
    //只有羊也为false
    //有羊且有农民为false
    //其他返回true
    if (!strstr($str, 'C')) {
        $result = false;
    } else {
        if ($str === 'C') {
            $result = false;
        } elseif (strstr($str, 'C') && strstr($str, 'A')) {
            $result = false;
        } else {
            $result = true;
        }
    }
    return $result;
}
$steps = 0;
$log = []; //记录每步棋
$circles = 0;
while ($leftBank != '') {
    $c = mt_rand(1, 8);
    switch ($c) {
        case 1: //农夫带狼去右岸
            $leftBankTmp = str_replace('A', '', $leftBank);
            $leftBankTmp = str_replace('B', '', $leftBankTmp);
            $rightBankTmp = $rightBank . 'AB';
            $logOpTmp = '农民和狼 去右岸';
            break;

        case 2: //农夫带菜去右岸
            $leftBankTmp = str_replace('A', '', $leftBank);
            $leftBankTmp = str_replace('D', '', $leftBankTmp);
            $rightBankTmp = $rightBank . 'AD';
            $logOpTmp = '农民和菜 去右岸';
            break;

        case 3: //农夫带羊去右岸
            $leftBankTmp = str_replace('A', '', $leftBank);
            $leftBankTmp = str_replace('C', '', $leftBankTmp);
            $rightBankTmp = $rightBank . 'AC';
            $logOpTmp = '农民和羊 去右岸';
            break;

        case 4: //农夫独自去右岸
            $leftBankTmp = str_replace('A', '', $leftBank);
            $rightBankTmp = $rightBank . 'A';
            $logOpTmp = '农民 去右岸';
            break;

        case 5: //农夫带狼来左岸
            $rightBankTmp = str_replace('A', '', $rightBank);
            $rightBankTmp = str_replace('B', '', $rightBankTmp);
            $leftBankTmp = $leftBank . 'AB';
            $logOpTmp = '农民和狼 去左岸';
            break;

        case 6: //农夫带羊来左岸
            $rightBankTmp = str_replace('A', '', $rightBank);
            $rightBankTmp = str_replace('C', '', $rightBankTmp);
            $leftBankTmp = $leftBank . 'AC';
            $logOpTmp = '农民和羊 去左岸';
            break;

        case 7: //农夫带菜来左岸
            $rightBankTmp = str_replace('A', '', $rightBank);
            $rightBankTmp = str_replace('D', '', $rightBankTmp);
            $leftBankTmp = $leftBank . 'AD';
            $logOpTmp = '农民和菜 去左岸';
            break;

        default: //农夫自己来左岸
            $rightBankTmp = str_replace('A', '', $rightBank);
            $leftBankTmp = $leftBank . 'A';
            $logOpTmp = '农民 去左岸';
            break;
    }
    $strlen = strlen($leftBankTmp) + strlen($rightBankTmp);
    if (!($strlen !== 4 || ifEat($leftBankTmp) || ifEat($rightBankTmp))) {
        $leftBank = $leftBankTmp;
        $rightBank = $rightBankTmp;
        $steps++;
        // $log[$steps]['op']='-AB';
        $log[$steps]['op'] = $logOpTmp;
        $log[$steps]['state'] = $rightBank;
        $log[$steps]['mark'] = '';
        if ($rightBank === '') {
            $steps = 0;
            $log = [];
        }
    }
    $circles++;
}
$m = sizeof($log);
for ($n = 1; $n <= $m; $n++) {
    for ($p = $n + 2; $p <= $m; $p++) {
        // for ($p = $m; $p >=$n+2; $p--) {
        if ($log[$n]['mark'] === 'marked') {
            break;
        }
        $leftState = str_split($log[$n]['state']);
        $rightState = str_split($log[$p]['state']);
        asort($leftState);
        asort($rightState);
        $leftState = array_values($leftState);
        $rightState = array_values($rightState);
        if ($leftState === $rightState) {
            for ($x = $n + 1; $x <= $p; $x++) {
                $log[$x]['mark'] = 'marked';
                $circles++;
            }
        }
        $circles++;
    }
    $circles++;
}
for ($n = 1; $n <= $m; $n++) {
    if ($log[$n]['mark'] === 'marked') {
        unset($log[$n]);
    }
    $circles++;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style type="text/css">
        *{
            font-size:20px;
        }    
    </style>

</head>
<body>
<p>题目:农民要把狼, 羊, 菜 从左岸运到右岸, 只有农民能划船, 每次只能运1个东西; 没有农民看着, 狼会吃羊, 羊会吃菜.求解运送方案.</p>
<p>解答</p>

<?php
$log = array_values($log);
echo "  <span style=\"color:blue\">原有</span>: 左岸: 农民 狼 羊 菜<br>";
echo "           右岸: <br>";
echo "<br>";
foreach ($log as $k => $v) {
    $abcd = ['A', 'B', 'C', 'D'];
    $stepNew = $k + 1;
    $r_state = str_split($v['state']);
    asort($r_state);
    $l_state = array_diff($abcd, $r_state);
    $tt = ['A' => '农民', 'B' => '狼', 'C' => '羊', 'D' => '菜'];
    $leftStateWords = '';
    $rightStateWords = '';
    foreach ($l_state as $vv) {
        $leftStateWords = $leftStateWords . $tt[$vv] . ' ';
        $circles++;
    }
    foreach ($r_state as $vv) {
        $rightStateWords = $rightStateWords . $tt[$vv] . ' ';
        $circles++;
    }
    echo "第{$stepNew}步: {$v['op']}<br>";
    echo "  <span style=\"color:blue\">结果</span>: 左岸: $leftStateWords<br>";
    echo "           右岸: $rightStateWords<br>";
    echo "<br>";
    $circles++;
}
echo "共使用{$circles}次循环.";
?>

</body>
</html>

企业QQ与QQ同时登录

1、我们先在任务管理中停用,“QQEIMPlatform”服务。

运行企业QQ,“开始”->“运行”->“services.msc”,在服务中停止“QQEIMPlatform”服务,并设置为“禁用”

2、打开注册表,找到“HKEY_USERS\S-1-5-21-602162358-1284227242-682003330-500\Software\Tencent\QQEIMPlatform”,清空QQEIMPlatform下的所有值(有个默认值删除不了,不用管它),注意不是删除QQEIMPlatform,因为删除后企业qq又会重新创建一个。

设置上一步中的QQEIMPlatform的权限为“只读”(经测试,完成第二步后,可以同时登陆了,但是过一会,个人qq又会被强制退出,且注册表此处QQEIMPlatform的值也会重新生成,故在此处设置为“只读”,防止再次写入)。

这个时候,个人QQ能与企业QQ同时在线了;以后无论重启电脑还是关闭QQ,再登陆都能同时在线。

这个方法在XP系统下测试有效。

ASP连接MySQL方法

1.安装Connector/ODBC
官网: https://dev.mysql.com/downloads/connector/odbc/

可能需要预先安装Visual C++ Redistributable for Visual Studio 2015, 在这里下载: https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145

2.打开控制面板->管理工具->ODBC数据源

3.在 用户DSN页面点击 添加按钮,选择添加MySQL ODBC 8.0 Unicode Driver

4.在弹出的MySQL Connector/ODBC Data Source Configuration页面进行如下设置:
a.Data Source Name写conn
b.TCP/IP Server写服务器网址, 端口保持3306
c.在User和Password填写MySQL的用户名和密码
d.在Database里选择1个已有的数据库, 点击Test, 盼望显示成功

5.点OK后,打开系统DSN页面,进行与用户DSN页面相同的操作,就是重复上面3-4步

6.在ASP文件中使用如下代码,显示1表示连接成功

<%
set conn=Server.Createobject("adodb.Connection") 
str="dsn=conn;Driver={mysql driver};server=127.0.0.1;uid=root;pwd=;database=psd1812"
'上面127.0.0.1是MySQL数据库地址;root是MySQL用户名;pwd=后面可以写MySQL密码;psd1812是要打开的数据库名称
conn.open(str)
response.Write(conn.state) '显示连接状态,若为1表示连接成功,若为0连接失败。
'以上连接MySQL已经完成,下面来提取数据

sql = "select * from coding_category"
set rs = conn.execute(sql)

While Not rs.EOF    
    Response.Write rs.Fields("category_Name") & ", " & rs.Fields("id") & "<br>"   
    rs.MoveNext
Wend     

rs.Close
Set rs = Nothing
%>