S · B · Y · X 2023-07-28 17:06 采纳率: 40%
浏览 10
已结题

一道C++题答案错误

题目:算24点【递归式搜索】
题目描述
  您可以使用的运算只有:+,-,,/,您还可以使用()来改变运算顺序。注意:所有的中间结果须是整数,所以一些除法运算是不允许的(例如,(22)/4是合法的,2*(2/4)是不合法的)。下面我们给出一个游戏的具体例子:
  若给出的4个操作数是:1 2 3 7,则一种可能的解答是1+2+3*7=24。
  本题不要求输出具体计算过程。
输入输出格式
输入格式:
  只有一行,四个1到9之间的自然数。

输出格式:
  如果有解的话,只要输出“yes”。如果没有解则输出“no”。
  注意:不要输出引号“”。

#include<bits/stdc++.h>
using namespace std;
int num[5];
bool b[5];
void dfs(int t,int res){
//    printf("%d\t%d\n",t,res);
    if(t==5){
        if(res==24) printf("yes"),exit(0);
        return;
    }
    for(int i=1;i<=4;i++){
        if(b[i]==1) continue;
        b[i]=1;
        dfs(t+1,res+num[i]);
        dfs(t+1,res-num[i]);
        dfs(t+1,res*num[i]);
        if(res%num[i]==0) dfs(t+1,res/num[i]);
        b[i]=0;
    }
}
int main(){
    for(int i=1;i<=4;i++) scanf("%d",&num[i]);
    dfs(1,0);
    printf("no\n");
}

输入7 7 8 9本应该输出no但程序输出的是yes

  • 写回答

5条回答 默认 最新

  • Nightmare004 2023-07-29 15:58
    关注

    第一个数字应该不能除,因为一开始res=0,然后进来就会出现res%num[0]==0, 也就是0%7==0, 相当于直接少了一个数字,最后7+8+9=24

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月6日
  • 已采纳回答 7月29日
  • 创建了问题 7月28日

悬赏问题

  • ¥15 maven打包时,为什么有的依赖打不进去包
  • ¥15 求复现机器学习文章一篇
  • ¥15 爬虫抓取数据|解析视频文本内容(相关搜索:自动化)
  • ¥15 combobox绑定值改变的问题
  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包