9月9号字节跳动笔试(后台研发PHP) - Go语言中文社区

9月9号字节跳动笔试(后台研发PHP)


题目一:从一个字符串中找出无重复的最大子串(此题忘记截图)。
解答:

<?php
/**
 * Created by Sean.
 * Date: 2018/9/9
 * Time: 9:24
 */
print_r("请输入字符串:");
fscanf(STDIN,"%s",$str);
$temp = array();
$length = 0;
for($i = 0;$i < strlen($str);$i++){
    if (in_array($str[$i],$temp)){
        if (count($temp) >= $length) {
            $length = count($temp);
            $result = substr($str, $i-$length, $length);
        }
        $temp = [];
    }
    array_push($temp,$str[$i]);
}
if (count($temp) > $length){
    $result = substr($str,'-'.count($temp));
}
print_r("最大长度为:".strlen($result));
print_r("n最大长度对应的字符串为:".$result);

题目二:
这里写图片描述
解答:

<?php
/**
 * Created by Sean.
 * Date: 2018/9/9
 * Time: 11:27
 */

print_r('请输入数组长度:');
fscanf(STDIN,"%d",$M);

//构造随机数组
$info = [];
for($i = 0;$i < $M;$i++){
    for ($j = 0;$j < $M;$j++){
        $info[$i][$j] = rand(0,1);
        print_r($info[$i][$j]." ");
    }
    print_r("n");
}
$num = 0;
for ($i = 0;$i < $M;$i++){
    for ($j = 0;$j < $M;$j++){
        if ($info[$i][$j] == 1){
            if ($j > 0){
                if ($i > 0){
                    if ($info[$i][$j-1] == 0 && $info[$i-1][$j] == 0){
                        $num++;
                    } elseif ($info[$i][$j-1] == 1 && $info[$i-1][$j] == 1 && $info[$i-1][$j-1] == 0){
                        $num--;
                    }
                } else{
                    if ($info[$i][$j-1] == 0){
                        $num++;
                    }
                }
            } else{
                if ($i > 0){
                    if ($info[$i-1][$j] == 0){
                        $num++;
                    }
                } else{
                    $num++;
                }
            }
        }
    }
}
print_r("部门数为:$num");

题目三:
这里写图片描述
解答:

<?php
/**
 * Created by Sean.
 * Date: 2018/9/9
 * Time: 14:32
 */
print_r("请输入错误ip:");
fscanf(STDIN,'%s',$ip);

$ip_len = strlen($ip);
if ($ip_len > 12 || $ip_len < 4){
    print_r('输入ip有误');
    exit(0);
}
$pos_ip = [];
$p = 0;

print_r('可能的结果有:');
for($i = 1;$i < 4;$i++){
    $first = substr($ip,0,$i);
    if ($first >= 255){
        continue;
    }
    for ($j = 1;$j < 4;$j++) {
        $second = substr($ip, $i, $j);
        if ($second >= 255) {
            continue;
        }
        for ($k = 1; $k < 4; $k++) {
            $four_len = $ip_len- $i - $j - $k;
            if ($four_len <= 0){
                continue;
            }
            $third = substr($ip, ($i + $j), $k);
            $four = substr($ip, ($i + $j + $k),$four_len);
            if ($third >= 255 || $four >= 255) {
                continue;
            }
            $pos_ip[$p++] = $first . '.' . $second . '.' . $third.'.'.$four;
            print_r("n".$pos_ip[$p-1]);
        }
    }
}
print_r("n有".$p.'种可能');

题目四:
这里写图片描述
解答:

<?php
/**
 * Created by Sean.
 * Date: 2018/9/9
 * Time: 16:43
 */
print_r('请输入数组长度:');
fscanf(STDIN,'%d',$n);

print_r("请输入 $n 个整数,以空格分隔:");
$data = fgets(STDIN);
$temp_arr = explode(' ',$data);
if (count($temp_arr) > $n){
    print_r('输入数组长度与实际长度不符,已自动提取前'.$n.'个组成对应数组');
} elseif (count($temp_arr) < $n){
    print_r('数组长度不够,请重新输入!');
}

$arr = array_slice($temp_arr,0,$n);
$result = array();

print_r("结果表示:");
foreach ($arr as $item => $itemVal){
    if ($itemVal[0] == 0){
        if (strlen($itemVal) > 2 && strlen($itemVal) < 6){
            $result[$item] = 1;
        } else{
            $result[$item] = 0;
        }
    } else{
        $num = ceil(strlen($itemVal)/8);
        if ($num < 2){
            $result[$item] = 0;
        } else{
            if (substr($itemVal,0,$num) == str_repeat('1',$num) && substr($itemVal,$num,(8-$num)) == str_repeat('0',8-$num)){
                for ($i = 1;$i < $num;$i++){
                    if (substr($itemVal,8*$i,2) == '10'){
                        $i == ($num-1) && $result[$item] = 1;
                    } else{
                        $result[$item] = 0;
                        break;
                    }
                }
            } else{
                $result[$item] = 0;
            }
        }
    }
    print_r($result[$item]." ");
}

题目五:
这里写图片描述
解答:

<?php
/**
 * Created by Sean.
 * Date: 2018/9/9
 * Time: 21:29
 */
print_r('请输入用户数:');
fscanf(STDIN,'%d',$N);

print_r('请输入关系对数:');
fscanf(STDIN,'%d',$M);

print_r('请输入'.$M.'对关系,以,分离,每两个一对:');
$D = fgets(STDIN,4*$M);
$data = explode(' ',$D);

while(count($data) < 2*$M){
    print_r('关系对不够,请重新输入:');
    $D = fgets(STDIN,4*$M);
    $data = explode(' ',$D);
}

if (count($data) > 2*$M){
    array_filter($data);
    $data = array_slice($data,0,2*$M);
    print_r('数据多比预期关系对数多,已提取前'.$M.'对!');
}

$temp = array();
for($i = 0;$i < 2*$M;$i = $i+2){
    if (!array_key_exists($data[$i],$temp)){
        $temp[$data[$i]] = array();
    }
    if (!in_array($data[$i+1],$temp[$data[$i]])){
        str_replace("n",'',$data[$i+1]);
        array_push($temp[$data[$i]],$data[$i+1]);
    }
}

$result = [];
foreach ($temp as $item => $itemVal){
    foreach ($itemVal as $ltVal){
        if (!array_key_exists($ltVal,$result)){
            $result[$ltVal] = array();
        }
        if (!in_array($item,$result[$ltVal])){
            array_push($result[$ltVal],$item);
        }
        if (!array_key_exists($ltVal,$temp)){
            continue;
        }
        foreach ($temp[$ltVal] as $ptVal){
            if (!array_key_exists($ptVal,$result)){
                $result[$ptVal] = [];
            }
            if (!in_array($item,$result[$ptVal]) && $item != $ptVal){
                array_push($result[$ptVal],$item);
            }
            if (!in_array($ltVal,$result[$ptVal])){
                array_push($result[$ptVal],$ltVal);
            }
        }
    }
}

print_r('抖音红人有:');
$count = 0;
foreach ($result as $item => $value){
    if (count($value) >= $N-1){
        print_r($item.' ');
        $count++;
    }
}
print_r("n总人数为:$count");

总结:本次题目总的来说比较简单,以上为个人想法,欢迎讨论!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_24056381/article/details/82590707
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-18 20:50:18
  • 阅读 ( 964 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢