swust OJ 2469: C 小Y的难题(1)

本文探讨了一道有趣的数学题目,玩家需要通过推理确定未知符号,以构成有效的数学等式。文章提供了一个算法解决方案,利用深度优先搜索来穷举所有可能的组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

近期小Y迷上了数学,总是在思考各种数学问题。有一天,他不小心把墨水洒在草稿纸上。他如今能看到的是“2?3?1?4”(?表示看不清的地方)。小Y的记忆力不错,他知道:
1、每一个?仅仅会是“+”、“-”,“=”三个符号之中的一个。
2、总共同拥有且仅有一个“=”。
3、原式一定是一个等式。如“2+3-1=4”
如今他突然想知道,有多少种可能性,满足上面3个要求。

Input

多组输入。
每组第一行有一个数字n。表示小Y从左到右,一共能够看到n个数字。(2<=n<=15)
每组第二行有n个数字。分别表示这n个数字是什么。保证每一个数字都是非负整数,且小于10^7。

Output

对于每组,输出一行,这一行仅仅有一个数字,表示有多少种可能性满足题意。

Sample Input

4
2 3 1 4
4
1 1 1 1

Sample Output

2
6
#include<stdio.h>
int map[30],n,ans;
void DFS(int sum,int count,int count1)  //count1记录的是等式的减号,有多少个减号就有多少种=号可以达到目标
{
    if(count>n)
        return;
    if(sum==0&&count==n)
        ans+=count1;
    DFS(sum+map[count],count+1,count1);
    DFS(sum-map[count],count+1,count1+1);
}
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        ans=0;
        for(int i=0;i<n;i++)
            scanf("%d",&map[i]);
        DFS(map[0],1,0);
        printf("%d\n",ans);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值