抛个砖:
1:<?php
if(is_array($_POST) && count($_POST))
{
for($c=0,$len=strlen($_POST['target']); $c<$len; $c++)
{
$array[strtolower($_POST['target']{$c})] += 1;
}
foreach($array as $k=>$v)
{
echo $k.":".$v." ";
}
}
?>
<form method="post">
参照:<input name="target">
<input type="submit">
</form>======================================================
2:<?php
if(is_array($_POST) && count($_POST))
{
function getBigger($target)
{
global $array;
foreach($array as $v)
{
if($v > $target) return $v;
}
return false;
} $result = "";
$array = explode(" ", $_POST['array']);
sort($array);
$smallest = $array[0] ? $array[0] : $array[1];
$len = strlen($_POST['target']); if(in_array($_POST['target']{0}, $array))
{
$found = false;
for($C=$len-1; $C>=0; $C--)
{
if($found)
{
$result .= $C==0 ? $_POST['target']{0} : $array[0];
}
else
{
if($C == $len-1)
{
$t = getBigger($_POST['target']{$C});
if($t === false)
{
$found = false;
$result .= $array[0];
}
else
{
$found = true;
$result .= $t;
}
}
elseif($C == 0)
{
$t = getBigger($_POST['target']{$C});
if($t===false) $result.=$array[0].$smallest;
else $result.=$t;
}
else $result.=$array[0];
}
}
}
else
{
$t = getBigger($_POST['target']{0});
if($t === false)
{
for($c=0; $c<=$len-1; $c++) $result.=$array[0];
$result .= $smallest;
}
else
{
for($c=0; $c<$len-1; $c++) $result.=$array[0];
$result .= $t;
}
}
echo strrev($result);
}
?>
<form method="post">
集合:<input name="array">空格分割<br>
参照:<input name="target">
<input type="submit">
</form>
1:<?php
if(is_array($_POST) && count($_POST))
{
for($c=0,$len=strlen($_POST['target']); $c<$len; $c++)
{
$array[strtolower($_POST['target']{$c})] += 1;
}
foreach($array as $k=>$v)
{
echo $k.":".$v." ";
}
}
?>
<form method="post">
参照:<input name="target">
<input type="submit">
</form>======================================================
2:<?php
if(is_array($_POST) && count($_POST))
{
function getBigger($target)
{
global $array;
foreach($array as $v)
{
if($v > $target) return $v;
}
return false;
} $result = "";
$array = explode(" ", $_POST['array']);
sort($array);
$smallest = $array[0] ? $array[0] : $array[1];
$len = strlen($_POST['target']); if(in_array($_POST['target']{0}, $array))
{
$found = false;
for($C=$len-1; $C>=0; $C--)
{
if($found)
{
$result .= $C==0 ? $_POST['target']{0} : $array[0];
}
else
{
if($C == $len-1)
{
$t = getBigger($_POST['target']{$C});
if($t === false)
{
$found = false;
$result .= $array[0];
}
else
{
$found = true;
$result .= $t;
}
}
elseif($C == 0)
{
$t = getBigger($_POST['target']{$C});
if($t===false) $result.=$array[0].$smallest;
else $result.=$t;
}
else $result.=$array[0];
}
}
}
else
{
$t = getBigger($_POST['target']{0});
if($t === false)
{
for($c=0; $c<=$len-1; $c++) $result.=$array[0];
$result .= $smallest;
}
else
{
for($c=0; $c<$len-1; $c++) $result.=$array[0];
$result .= $t;
}
}
echo strrev($result);
}
?>
<form method="post">
集合:<input name="array">空格分割<br>
参照:<input name="target">
<input type="submit">
</form>
解决方案 »
- 大家看看我这句话那里出错了?
- 这种js的json对象 怎么直接和php交互吗
- 关于php处理JSON的问题
- 新手问题帮忙看看了 谢谢了
- 初学php怎样在mysql中插入数据啊
- imagettftext有人使用过这个函数吗? 关于向图片上写文字的函数
- phpcms中只在非空值时判断唯一值这么处理
- 有段php看不明白
- PHP加MySQL出现如下错误,请看看!如何解决
- 如何判断数据集rs为空?
- php 有api么?? 比如我不知道include(),怎么办,不会每次都得去baidu吧??
- 史上最牛B的缩放图width/XXX/height/XXX (XXX是数值) ,就可以得到不同的大小的图片,求解
if(empty($str)){
return ;
}
$arrstr = array();
for($i=0;$i<strlen($str);$i++){
if (array_key_exists(strtolower($str[$i]), $arrstr)) {
$arrstr[strtolower($str[$i])]+=1;
}elseif(array_key_exists(strtoupper($str[$i]), $arrstr)){
$arrstr[strtoupper($str[$i])]+=+1;
}else{
$arrstr[$str[$i]]=1;
}
}
foreach($arrstr as $key=>$value){
$returnstr = $returnstr.$key.':'.$value.' ';
}
return $returnstr;
}
echo strnum('bCcd*ba');
第二题有一点问题:集合是0 1 2 3 4,参照是239881,你的结果就是200002
第二题:http://www.52lf.net/?p=118
第一题,实质是词频统计;这个PHP数组功能强大
第二题:以前有人说过的,排列组合找最近值或排列方式
function test($str){ $str = strtolower($str); for($i=0;$i<strlen($str);$i++)
{
$ary[$str[$i]]++;
} foreach($ary as $key=>$value)
{
echo $key.":".$value;
}
}$str = "bcCd*ba";test($str);
?>
function get_min($a,$b,$offest=0){
if($offest==0){
$b=(string)$b;
sort($a);
} $min='';$flag=0; if(is_every_char_in_array($a,$b))
{
for($i=strlen($b)-1;$i>=0;$i--){
$bigger=get_bigger($a,$b[$i]);
if($bigger){
$min=substr($b,0,$i).$bigger;
for($j=$i;$j<strlen($b)-1;$j++)
$min.=$a[0];
return $min;
}
}
$min=get_min_not_zero($a);
for($i=0;$i<strlen($b);$i++)
$min.=$a[0];
return $min;
}
for($i=$offest;$i<strlen($b);$i++){
if($flag==0){
if(get_equal($a,$b[$i])){
return get_min($a,$b,++$i);
} $bigger=get_bigger($a,$b[$i]);
if($bigger){
$min.=$bigger;
$flag=1;
}
else{
if(strlen($b)==1)
return "$a[0]";
$before_str=substr($b,0,$i);
$min=get_min($a,$before_str).$a[0];
for($j=$i+1;$j<strlen($b);$j++)
$min.=$a[0];
return $min;
}
}
else{
$min.=$a[0];
}
}
return substr($b,0,$offest).$min;
}
function is_every_char_in_array($a,$b){
for($i=0;$i<strlen($b);$i++){
if(!in_array($b[$i],$a))
return false;
}
return true;
} function get_bigger($a,$c){
foreach($a as $value){
if($value>$c)
return $value;
}
return false;
}
function get_equal($a,$c){
foreach($a as $value){
if($value==$c)
return true;
if($value>$c)
return false;
}
return false;
} function get_min_not_zero($a){
foreach($a as $value){
if($value>0)
return $value;
}
die("all int is less than zero");
}
for($i=1;$i<=20;$i++){
$d=(int)(rand()%1000);echo "$d\t";
echo get_min(array(1,0,2,3),$d);
echo "<br>";
}
?>
<?php
$str = strtolower('123421412213213asdwqEWqewqewqeqwewqe12312312');$n = 0;
$result = array();
while (isset($str{$n})) {
$result[$str{$n++}]++;
}print_r($result);更简单的解法
<?php
$str = strtolower('123421412213213asdwqEWqewqewqeqwewqe12312312');
foreach (count_chars($str, 1) as $code => $total) {
echo chr($code), ':', $total, "\n";
}
function getMinCom($sets, $num) {
$result = array();
$n = 0;
$num = strval($num);
sort($sets);
while (isset($num{$n})) {
$result[] = getMinNum4Index($sets, $num{$n++});
}
return implode('', $result);
}function getMinNum4Index($sets, $num) {
$first = 0;
$last = count($sets);
$bfMid = 0; while ($first < $last) {
$mid = intval(($first + $last) / 2);
$midValue = $sets[$mid]; if ($midValue >= $num) {
$last = $mid;
} else {
$first = $mid;
}
if ($mid == $bfMid || $mid == 0) {
return $midValue = $sets[$mid];
}
$bfMid = $mid;
}
}$sets = array(1, 5, 7);
echo getMinCom($sets, 42156);再优化的话,就是缓存排序后的数组
没有经过太严格的测试。。
<?
function getMinNumberNotZero($AR)
{
return $AR[0]?$AR[0]:$AR[1];
}
function getMinNumber($AR)
{
return $AR[0];
}
function getMaxNumber($AR)
{
return $AR[count($AR)-1];
}
function getBigerNum($AR,$m)
{
foreach($AR as $k =>$v)
if($v > $m)return $v;
return false;
}
function getK($Ar,$k)
{
$MinNumberNotZero=strval(getMinNumberNotZero($Ar));
$MinNumber=strval(getMinNumber($Ar));
$MaxNumber=strval(getMaxNumber($Ar));
$str_k=strval($k);
$klen=strlen($str_k);
$eq_max_num=intval(str_repeat($MaxNumber,$klen));
if($eq_max_num <= $k)
{
return intval($MinNumberNotZero.str_repeat($MinNumber,$klen));
}
else
{
$retK="";
for($i=0;$i<$klen;$i++)
{
$bit_k_num=intval($str_k[$i]);
if(in_array($bit_k_num,$Ar))
$retK.=$str_k[$i];
else
{
$bignum=getBigerNum($Ar,$bit_k_num);
$retK.=$bignum.str_repeat($MinNumber,$klen-$i);
}
}
$retnum=intval($retK);
if($retnum > $k)return $retnum;
$retK[$klen-1]=getBigerNum($Ar,intval($retK[$klen-1]));
return intval($retK);
}
}
$Ar=array(1,2,0);
$k=23;
sort($Ar);
$Knum=getK($Ar,$k);
echo $Knum;
?>
还有可能出现相等的情况
修改了一下<?
function getMinNumberNotZero($AR)
{
return $AR[0]?$AR[0]:$AR[1];
}
function getMinNumber($AR)
{
return $AR[0];
}
function getMaxNumber($AR)
{
return $AR[count($AR)-1];
}
function getBigerNum($AR,$m)
{
foreach($AR as $k =>$v)
if($v > $m)return $v;
return $AR[count($AR)-1];
}
function getK($Ar,$k)
{
$MinNumberNotZero=strval(getMinNumberNotZero($Ar));
$MinNumber=strval(getMinNumber($Ar));
$MaxNumber=strval(getMaxNumber($Ar));
$str_k=strval($k);
$klen=strlen($str_k);
$eq_max_num=intval(str_repeat($MaxNumber,$klen));
if($eq_max_num <= $k)
{
return intval($MinNumberNotZero.str_repeat($MinNumber,$klen));
}
else
{
$retK="";
for($i=0;$i<$klen;$i++)
{
$bit_k_num=intval($str_k[$i]);
if(in_array($bit_k_num,$Ar))
$retK.=$str_k[$i];
else
{
$bignum=getBigerNum($Ar,$bit_k_num);
$retK.=$bignum.str_repeat($MinNumber,$klen-$i);
break;
}
}
$retnum=intval($retK);
if($retnum > $k)return $retnum;
$retK_len = strlen($retK);
for($i=$retK_len-1;$i>=0;$i--)
{
$bit_k_num = intval($retK[$i]);
$bignum=getBigerNum($Ar,$bit_k_num);
if($bignum > $bit_k_num)
{
$retK[$i]=strval($bignum);break;
}
}
return intval($retK);
}
}
$Ar=array(1,5,7);
$k=23;
sort($Ar);
$Knum=getK($Ar,42156);
echo $Knum;
?>
数组要处理下,不能出现重复元素,也不允许出现array(0),且已经排好序
<?
function getMinNumberNotZero($AR)
{
return $AR[0]?$AR[0]:$AR[1];
}
function getMinNumber($AR)
{
return $AR[0];
}
function getMaxNumber($AR)
{
return $AR[count($AR)-1];
}
function getBigerNum($AR,$m)
{
foreach($AR as $k =>$v)
if($v > $m)return $v;
return $AR[count($AR)-1];
}
function getK($Ar,$k)
{
$MinNumberNotZero=strval(getMinNumberNotZero($Ar));
$MinNumber=strval(getMinNumber($Ar));
$MaxNumber=strval(getMaxNumber($Ar));
$str_k=strval($k);
$klen=strlen($str_k);
$eq_max_num=intval(str_repeat($MaxNumber,$klen));
if($eq_max_num <= $k)
{
return intval($MinNumberNotZero.str_repeat($MinNumber,$klen));
}
else
{
$retK="";$fc=true;
for($i=0;$i<$klen;$i++)
{
$bit_k_num=intval($str_k[$i]);
if(in_array($bit_k_num,$Ar))
$retK.=$str_k[$i];
else
{
$bignum=getBigerNum($Ar,$bit_k_num);
$tmp_retK=$retK.$bignum.str_repeat($MinNumber,$klen-$i-1);
if(intval($tmp_retK) >$k && $fc)
{
$retK.=$bignum.str_repeat($MinNumber,$klen-$i-1);
break;
}
$retK.=$str_k[$i];
$fc=false;
}
}
$retnum=intval($retK);
echo $retnum."-";
if($retnum > $k)return $retnum;
$retK_len = strlen($retK);
$retK2="";
for($i=$retK_len-1;$i>=0;$i--)
{
$bit_k_num = intval($retK[$i]);
$bignum=strval(getBigerNum($Ar,$bit_k_num));
$retK2=intval(substr($retK,0,$i).$bignum.str_repeat($MinNumber,$retK_len-$i-1));
if($retK2 >$k)return $retK2;
}
return intval($retK2);
}
}
$Ar=array(0,1,3,4,6,7,9);
sort($Ar);
for($i = 0;$i< 1000;$i++)
{
$k=rand(1,99999999);
echo $k.":".getK($Ar,$k)."<br>";
}?>
<?
function getMinNumberNotZero($AR)
{
return $AR[0]?$AR[0]:$AR[1];
}
function getMinNumber($AR)
{
return $AR[0];
}
function getMaxNumber($AR)
{
return $AR[count($AR)-1];
}
function getBigerNum($AR,$m)
{
foreach($AR as $k =>$v)
if($v > $m)return $v;
return $AR[count($AR)-1];
}
function getK($Ar,$k)
{
$MinNumberNotZero=strval(getMinNumberNotZero($Ar));
$MinNumber=strval(getMinNumber($Ar));
$MaxNumber=strval(getMaxNumber($Ar));
$str_k=strval($k);
$klen=strlen($str_k);
$eq_max_num=intval(str_repeat($MaxNumber,$klen));
if($eq_max_num <= $k)
{
return intval($MinNumberNotZero.str_repeat($MinNumber,$klen));
}
else
{
$retK="";
for($i=$klen-1;$i>=0;$i--)
{
$bit_k_num = intval($str_k[$i]);
$bignum=strval(getBigerNum($Ar,$bit_k_num));
$retK=intval(substr($str_k,0,$i).$bignum.str_repeat($MinNumber,$klen-$i-1));
if($retK >$k)return $retK;
}
return intval($retK);
}
return intval($retK);
}
$Ar=array(0,1,2,3,4,5,6,7,8,9);
sort($Ar);
for($i = 0;$i< 1000;$i++)
{
$k=rand(1,99999999);
echo $k.":".getK($Ar,$k)."<br>";
}?>
<?
function getMinNumberNotZero($AR)
{
return $AR[0]?$AR[0]:$AR[1];
}
function getMinNumber($AR)
{
return $AR[0];
}
function getMaxNumber($AR)
{
return $AR[count($AR)-1];
}
function getBigerNum($AR,$m)
{
foreach($AR as $k =>$v)
if($v > $m)return $v;
return $AR[count($AR)-1];
}
function getK($Ar,$k)
{
$MinNumberNotZero=strval(getMinNumberNotZero($Ar));
$MinNumber=strval(getMinNumber($Ar));
$MaxNumber=strval(getMaxNumber($Ar));
$str_k=strval($k);
$klen=strlen($str_k);
$eq_max_num=intval(str_repeat($MaxNumber,$klen));
if($eq_max_num <= $k)
{
return intval($MinNumberNotZero.str_repeat($MinNumber,$klen));
}
else
{
$retK="";$fc=true;
for($i=0;$i<$klen;$i++)
{
$bit_k_num=intval($str_k[$i]);
if(in_array($bit_k_num,$Ar))
$retK.=$str_k[$i];
else
{
$bignum=getBigerNum($Ar,$bit_k_num);
$tmp_retK=$retK.$bignum.str_repeat($MinNumber,$klen-$i-1);
if(intval($tmp_retK) >$k && $fc)
{
$retK.=$bignum.str_repeat($MinNumber,$klen-$i-1);
break;
}
$retK.=$bignum;
$fc=false;
}
}
$retnum=intval($retK);
echo $retnum."-";
if($retnum > $k)return $retnum;
$retK_len = strlen($retK);
$retK2="";
for($i=$retK_len-1;$i>=0;$i--)
{
$bit_k_num = intval($retK[$i]);
$bignum=strval(getBigerNum($Ar,$bit_k_num));
$retK2=intval(substr($retK,0,$i).$bignum.str_repeat($MinNumber,$retK_len-$i-1));
if($retK2 >$k)return $retK2;
}
return intval($retK2);
}
}
$Ar=array(0,1,2,3);
sort($Ar);
for($i = 0;$i< 1000;$i++)
{
$k=rand(1,99999999);
echo $k.":".getK($Ar,$k)."<br>";
}?>
<?php
function get_min($a,$b,$offest=0){
if($offest==0){
$b=(string)$b;
sort($a);
} $min='';$flag=0; if(is_every_char_in_array($a,$b))
{
for($i=strlen($b)-1;$i>=0;$i--){
$bigger=get_bigger($a,$b[$i]);
if($bigger){
$min=substr($b,0,$i).$bigger;
for($j=$i;$j<strlen($b)-1;$j++)
$min.=$a[0];
return $min;
}
}
$min=get_min_not_zero($a);
for($i=0;$i<strlen($b);$i++)
$min.=$a[0];
return $min;
}
for($i=$offest;$i<strlen($b);$i++){
if($flag==0){
if(get_equal($a,$b[$i])){
return get_min($a,$b,++$i);
} $bigger=get_bigger($a,$b[$i]);
if($bigger){
$min.=$bigger;
$flag=1;
}
else{
if(strlen($b)==1)
return get_min_not_zero($a).$a[0];
$before_str=substr($b,0,$i);
$min=get_min($a,$before_str).$a[0];
for($j=$i+1;$j<strlen($b);$j++)
$min.=$a[0];
return $min;
}
}
else{
$min.=$a[0];
}
}
return substr($b,0,$offest).$min;
}
function is_every_char_in_array($a,$b){
for($i=0;$i<strlen($b);$i++){
if(!in_array($b[$i],$a))
return false;
}
return true;
} function get_bigger($a,$c){
foreach($a as $value){
if($value>$c)
return $value;
}
return false;
}
function get_equal($a,$c){
foreach($a as $value){
if($value==$c)
return true;
if($value>$c)
return false;
}
return false;
} function get_min_not_zero($a){
foreach($a as $value){
if($value>0)
return $value;
}
die("all int is less than zero");
}
for($i=1;$i<=20;$i++){
$d=(int)(rand()%1000);echo "$d\t";
echo get_min(array(1,0,2,3),$d);
echo "<br>";
}
?>
$sftr=strtolower($sftr);
$len=strlen($sftr);
$arr=array();
for ($i=0;$i<$len;$i++)
{
$arr[$i]=$sftr[$i];
}
$arr_1=array_count_values($arr);
foreach ($arr_1 as $key=>$val)
{
echo $key.':'.$val.' ';
}
function test($str){ $str = strtolower($str); for($i=0;$i <strlen($str);$i++)
{
$ary[$str[$i]]++;
} foreach($ary as $key=>$value)
{
echo $key.":".$value;
}
} $str = "bcCd*ba"; test($str);
?>
14楼
echo $key.":".$value 中$key 和 $value.
值从哪来,怎么得到的。
谢谢。。
有没有规定用什么语言?
JS可以不?
还是用PHP?
A=[0,1,3,8]这个应该算是一个数组
比较简单利用这个数组组合出一些数字来,然后与K比较,挑出大于K的数,再从中选择最小的整数
这种问题,也许第一个php中还能用到,第二个估计10几年编码都用不到。顺便提醒下coder们,做了这行,如果这些都没概念,最好好好温习下。
但具体到做网络编程,尤其是web程序,基本上这个不会出现。感兴趣的当基础,不感兴趣的还不如学学用得上的东西。
博文不如精专。