zoukankan      html  css  js  c++  java
  • 一个数组a[],有99个元素,为1100中的整数,找出其中缺少的那个数字

    利用冒泡排序,可以找出其中缺少的数字,但这里要告诉大家的是另外三个简单的办法。

    1,构造一个新数组,把原数组值作键,键作值。然后从1开始遍历新数组,如果某个下标的元素没有值,则这个下标就是原数组所没有的值

    2,1到100的和减去原数组的和,差值就是缺少的元素

    3,php异或运算的特性

    $a^1^2^3^....^100^1^2^3^....^100=$a;

    所以只要构造一个1-100的数组,和原数组进行遍历异或运算,就可以找出100数组比99数组多出的那个数字。

    代码如下:

    class A {
    //生成数组
    public function create() {
    for ($i = 0; $i < 100; $i++) {
    $arr[$i] = $i+1;
    }
    echo '排序之前<br>';
    $this->show($arr);
    echo '排序之后<br>';
    $arr = $this->swap($arr);
    $this->show($arr);
    return $arr;
    }
    public function swap($arr) {
    for ($i = 0; $i < 1000; $i++) {
    $m = rand(0, 99);
    $n = rand(0, 99);
    $temp = $arr[$m];
    $arr[$m] = $arr[$n];
    $arr[$n] = $temp;
    }
    echo '我删除了数字'.$arr[99].'<br>';
    unset($arr[99]);
    return $arr;
    }
    public function show($arr) {
    $count = count($arr);
    for ($i = 0; $i < $count; $i++) {
    if (($i+1)%5 == 0) {
    echo $arr[$i]."<br>";
    } else {
    echo $arr[$i].' ';
    }
    }
    echo '<br>';
    }
    public function method1($arr) {
    //键值对换
    for ($i = 0; $i < 99; $i++) {
    $newarr[$arr[$i]] = $i;
    }
    for ($i = 1; $i < 100; $i++) {
    if (!isset($newarr[$i])) {
    echo '缺少元素'.$i.'<br>';
    }
    }

    }
    public function method2(array $arr)
    {
    $sum1 = 0;
    $sum2 = 0;
    for ($i = 1; $i < 101; $i++) {
    $sum1 += $i;
    }
    $len = count($arr);
    for ($i = 0; $i < $len; $i++) {
    $sum2 += $arr[$i];
    $num = $sum1 - $sum2;
    }
    echo '缺少元素' . $num.'<br>';
    }
    public function method3($arr) {
    $len = count($arr);
    $result = '';
    for ($i = 0; $i < $len; $i++) {
    if ($i == 0) {
    $result = $arr[$i];
    } else {
    $result = $result^$arr[$i];
    }
    }
    $result2 = '';
    for ($i = 1; $i < 101; $i++) {
    if ($i == 0) {
    $result2 = $i;
    } else {
    $result2 = $result2^$i;
    }
    }
    $num = $result^$result2;
    echo '缺少元素'.$num.'<br>';
    }
    }
    header("Content-type:text/html;charset=utf-8");
    $a = new A();
    $b = $a->create();
    $a->method1($b);
    $a->method2($b);
    $c = $a->method3($b);
  • 相关阅读:
    局域网的组建方案
    网络的分类
    设置Windows的TCP/IP属性和内部网络号码
    在Windows8工作站上安装可靠多播协议
    在Windows Server 2012服务器上安装可靠多播协议
    【转】HTTP协议详解
    局域网的通信协议
    局域网的拓扑结构
    Shiro学习笔记(5)——web集成
    IT增值服务,客户案例(一)--山东青岛在职人士,2年.Net经验,转Java开发半年
  • 原文地址:https://www.cnblogs.com/warmsun/p/6559728.html
Copyright © 2011-2022 走看看