admin管理员组文章数量:1794759
php的cli模式编程
cli模式编程
前两天稍微有点闲,就去牛客网刷了几道算法题,之前算法一直都是c语言写的,然而这段时间都在学习php,c语言感觉有点力不从心,于是我就想到用php来编程。不编不知道,一编吓一跳,学了这么久的php,我竟然不知道php的标准输入方式,之前都是web端表单传至或者是ajax传值得到数据,并没有直接用php输入数据。闲话就不多说了,下面走入正题
php环境配置之前一直是集成wamp环境下写网页,也没必要配置环境 将php.exe所在的目录E:\\wampserver\\bin\\php\\php5.5.12存进环境变量path中
php标准输入输出 //标准输入 $s = trim(fgets(STDIN)); //标准输出 fwrite(STDOUT, "请输入一个3-50位长度的字符串: ");标准输入输出的获取很简单,网上一搜一大堆,找到标准输入输出,我就信心满满的来开始我的编程之旅。
1.[编程题] 黑白卡片 时间限制:1秒 空间限制:32768K 牛牛有n张卡片排成一个序列.每张卡片一面是黑色的,另一面是白色的。初始状态的时候有些卡片是黑色朝上,有些卡片是白色朝上。牛牛现在想要把一些卡片翻过来,得到一种交替排列的形式,即每对相邻卡片的颜色都是不一样的。牛牛想知道最少需要翻转多少张卡片可以变成交替排列的形式。
输入描述: 输入包括一个字符串S,字符串长度length(3 ≤ length ≤ 50),其中只包含’W’和’B’两种字符串,分别表示白色和黑色。整个字符串表示卡片序列的初始状态。
输出描述: 输出一个整数,表示牛牛最多需要翻转的次数。
输入例子: BBBW
输出例子: 1
题目分析:由题意得,要得到交替排列形式,只有BWBWBW…或者WBWBWB…这两种可能,得到这两种形式串所需步数,然后取出最小值。或可算出一种即可,若大于总数的一半则用总数减去,因为得到两种形式串的步数和为序列总数。可以通过比较前后两个数,若相同,则变,变量值加1;不同则不变,变量值不变,最后获得的序列由第一个值决定,若是大于总数的一半则总数减去算出的步数。
题目的思路已经出来了,接下来就是实战了,写了输入后
字符串逐个读取 $len = strlen($s); $arr = str_split($s);通过str_split函数将字符串存进arr数组中,然后使用for循环将字符一个一个读取然后比较 总的来说这个题想对来说,难点已经解决。下面是程序代码
<?php header("charset=utf-8"); // fwrite(STDOUT, "请输入一个3-50位长度的字符串: "); $s = trim(fgets(STDIN)); $len = strlen($s); if("^[WB]{3-50}+$"){ $arr = str_split($s); $j = 0; for($i=0; $i<$len-1; $i++){ if($arr[$i]=='W'){ if($arr[$i+1]==$arr[$i]){ $j++; $arr[$i+1]='B'; } }else{ if($arr[$i+1]==$arr[$i]){ $j++; $arr[$i+1]='W'; } } } if($j*2>$len){ $j=$len-$j; } echo $j; return $j; }else{ // fwrite(STDOUT, "请输入一个3-50位长度的字符串: "); $s = trim(fgets(STDIN)); } ?>这两行注释是由于牛客网答题系统不支持,还有更多的编程题会在后边续写。
版权声明:本文标题:php的cli模式编程 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686749805a98109.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论