美文网首页
【题目】计算未知等式的可能性(dfs)

【题目】计算未知等式的可能性(dfs)

作者: papi_k的小茅屋 | 来源:发表于2024-01-08 23:41 被阅读0次

本子上有一些数学等式,但是所有的运算符都没了。如:“3□1□2”(□表示被划掉的运算符)。
其中
1.每个□代表‘=’、‘-’、‘+’三个符号之一;
2.等式中有且仅有一个‘=’;
3.需要满足一个等式。如“3-1=2”。

计算满足该等式的可能性有多少。

输入:
输入一个数字n(2<=n<=15),代表等式可以看到n个数字。接着输入n个数字。保证每个数字都是非负整数,且小于10^5。

输出:
输出一个整数,表示该等式的可能性有多少。

示例1:
输入:
3
3 2 1

输出:
2

示例2:
输入:
4
1 1 1 1

输出:
6

主要代码段:

int tempLeft[10000];
int leftCnt = 0;
int tempRight[10000];
int rightCnt = 0;

int FindSameNumber(int *left, int leftCnt, int *right, int rightCnt)
{
    int res = 0;
    for (int i = 0; i < leftCnt; i++) {
        for (int j = 0; j < rightCnt; j++) {
            if (left[i] == right[j]) {
                res++;
            }
        }
    }
    
    return res;
}

// 从start到end遍历各种可能的结果
void dfs(int start, int end, int value, int *nums, int *temp, int *count)
{
    if (start == end) { 
        temp[*count] = value;
        (*count)++;
        return;
    }
    
    dfs(start + 1, end, value + nums[start + 1], nums, temp, count);
    dfs(start + 1, end, value - nums[start + 1], nums, temp, count);
    
    return;
}

int FindMaxNum(int *nums, int n)
{
    if (n == 2) {
        return nums[0] == nums[1] ? 1 : 0;
    }
    
    int res = 0;
    leftCnt = 0;
    rightCnt = 0;
    
    for (int i = 1; i < n; i++) { // 在nums中从左到右放等号。
        leftCnt = 0;
        rightCnt = 0;
        dfs(0, i - 1, nums[0], nums, tempLeft, &leftCnt);
        dfs(i, n - 1, nums[i], nums, tempRight, &rightCnt);
        res += FindSameNumber(tempLeft, leftCnt, tempRight, rightCnt);
    }
    
    return res;
}

int main()
{
    int n;
    scanf("%d", &n);
    int nums[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &nums[i]);
    }
    
    int a = FindMaxNum(&nums, n);
    
    printf("%d\n",a);
    
    return 0;
}

yo peace!

相关文章

  • 脑洞大开的火柴等式,没点想象力还真想不出来!

    最常见的移火柴题目,除了摆图形就是各种各样的火柴等式了, 比如今天的题目—— 一组脑洞大开的“等式”! 光会计算还...

  • 郑州轻工业大学oj题解(c语言)1058: 求解不等式

    1058: 求解不等式 题目描述已知不等式 1!+2!+3!+...+m!‹n,请编程对用户指定的n值计算并输出满...

  • leetcode79 单词搜索

    题目 单词搜索 分析 解法:dfs没啥可讲的,dfs初级练习题目(当然bfs也没问题)。 代码

  • 五下

    第一单元简易方程 1、表示相等关系的式子叫做等式。 2、含有未知数的等式是方程。 3、方程一定是等式;等式不一定是...

  • 题目链接:后序遍历 题目链接:树的直径 bfs: dfs:

  • 【高等数学】不等式的解和解集

    不等式概念:式子中有 解不等式:解不等式的过程称之为不等式,解不等式的值的取值范围成为解值,解不等式的未知数的值称...

  • 743. 网络延迟时间【深度优先搜索DFS】【超时】

    题目 思路 DFS;记录DFS到每个节点的时间arriveTime = make([]int, N+1, N+1)...

  • 二分图

    二分图判定: 题目链接:二分图判定 dfs: 最大匹配: 题目链接:最大匹配-匈牙利算法 dfs: 二维最大匹配:...

  • 认识函数

    基本用法 1什么是公式 1.1是EXCEL工作表中进行数值计算的等式 1.2是EXCEL工作表中进行数值计算的等式...

  • 图的结构 BFS DFS

    题目:BFS 一个队列,一个set集合 题目:DFS 题目:Kruskal算法 题目:Prim Dijkstra算法

网友评论

      本文标题:【题目】计算未知等式的可能性(dfs)

      本文链接:https://www.haomeiwen.com/subject/jyeondtx.html