php – 查找最小可能的数字与未知数字之间的差异

我有一些情况如下.

> 1? 2?
>?2 ?? 3
>? ?
> 5?0

现在我应该做的是找到一些代表问号的值,这将产生2个数字之间的最小可能差异.

答案应该是

> 19 20
> 023 023
> 0 0
> 05 00

注意:在2个值之间的最小绝对差之后将产生的数字必须最小.如上所述,最后一种情况可能是15和10,绝对差值为5,但无效.

我尝试了一些排列组合的想法,用于单独替换两个数字的问号,然后找出数字,但是数字的长度最多可以达到每个数字18位数.所以我相信这不是一个好主意.

然后我试图搜索类似的问题,但没有帮助.
我仍然认为正则表达式可能有助于解决这个问题,但我坚持如何做到这一点.

任何帮助欢迎!感谢名单!

语言应该是Php ..我正在与Php

好的,我有一个解决方案.

说明:

使用正则表达式来获取两个数字,然后从左到右成对比较,从假设相等.意思是他们都尽可能地解决相同的号码,如果两者都同时解决了0.

在有一对不相等的数字后,开始将较低的数字设置为9,将较高的数字设置为0,使其尽可能靠近.

Here是它的一个例子.

function minDiff($str) {
    preg_match("/([\d\?]+) ([\d\?]+)/",$str,$matches);

    $first = $matches[1];
    $second = $matches[2];

    $biggest = 0; // -1 = first,0 = none,1 = second

    $firstResult = 0;
    $secondResult = 0;

    for ($i = 0; $i < strlen($first); $i++) {
        $powerValue = strlen($first) - $i - 1;
        if ($biggest != 0) { // not equal
            if (!strcmp($first[$i],'?') && !strcmp($second[$i],'?')) {
                if ($biggest > 0) { // second is biggest
                    $firstResult += 9 * pow(10,$powerValue);
                } else { // first is biggest
                    $secondResult += 9 * pow(10,$powerValue);
                }
            } elseif (!strcmp($first[$i],$powerValue);
                }
                $secondResult += $second[$i] * pow(10,$powerValue);
            } elseif (!strcmp($second[$i],'?')) {
                if ($biggest < 0) { // first is biggest
                    $secondResult += 9 * pow(10,$powerValue);
                }
                $firstResult += $first[$i] * pow(10,$powerValue);
            } else {
                $firstResult += $first[$i] * pow(10,$powerValue);
                $secondResult += $second[$i] * pow(10,$powerValue);
            }
        } else { // both equal (so far)
            if (!strcmp($first[$i],'?')) {
                $firstResult += $second[$i] * pow(10,'?')) {
                $firstResult += $first[$i] * pow(10,$powerValue);
                $secondResult += $first[$i] * pow(10,$powerValue);
            } else {
                if (intval($first[$i]) > intval($second[$i])) {
                    $biggest = -1;
                } elseif (intval($first[$i]) < intval($second[$i])) {
                    $biggest = 1;
                }
                $firstResult += $first[$i] * pow(10,$powerValue);
            }

            // Find if next number will change
            if (($i + 1) < strlen($first) && strcmp($first[$i + 1],'?') && strcmp($second[$i + 1],'?')) {
                $diff = preg_replace('/\?/','0',substr($first,$i + 1)) - preg_replace('/\?/',substr($second,$i + 1));
                echo "$diff\n";
                // Check to see if you need to add 1 to the value for this loop
                if ($diff > pow(10,$powerValue) / 2) {
                    $secondResult += pow(10,$powerValue);
                    $biggest = 1;
                } elseif ($diff < pow(10,$powerValue) / -2) {
                    $firstResult += pow(10,$powerValue);
                    $biggest = -1;
                }
            }
        }
    }

    echo "first: ".str_pad($firstResult,strlen($first),"0",STR_PAD_LEFT)."\n";
    echo "second: ".str_pad($secondResult,strlen($second),STR_PAD_LEFT)."\n\n";
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


如何选择合适的 C++ Web 开发框架?
利用 C++ 框架构建高并发 Web 应用的策略
用 C++ 框架开发跨平台图形应用程序
golang框架中安全编码实践的最佳指南是什么?
golang框架与其他语言框架在设计理念上的区别有哪些?
C++ 图形框架与其他语言框架的比较
C++ 框架与其他 Web 开发框架的对比分析
使用 C++ 框架构建大型项目最佳实践
C++ 框架如何提高大型项目开发效率
C++ 框架中依赖注入的持续集成与部署工具
如何与社区协作和贡献到自定义 Golang 框架?
C++ 框架在大型项目中如何实现模块化开发
使用 C++ 框架开发跨平台 Web 应用
C++ 框架在大型项目中的优缺点
golang框架在性能上的优势体现在哪些方面?
C++ 框架在嵌入式系统内存优化中的优势
golang框架在人工智能与机器学习中的作用
如何扩展 Golang 框架以支持特定功能?
如何利用 Go Modules 和依赖项管理来自定义 Golang 框架?
Golang 框架中的性能优化技巧