某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某1笔或几笔。如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗?
如果有多种可能,则输出所有可能的情况。
我们规定:用户输入的第一行是:有错的总金额。
接下来是一个整数n,表示下面将要输入的明细账目的条数。
再接下来是n行整数,分别表示每笔账目的金额。
要求程序输出:所有可能漏掉的金额组合。每个情况1行。金额按照从小到大排列,中间用空格分开。
比如:

用户输入:
6
5
3
2
4
3
1
表明:有错的总金额是6;明细共有5笔。
此时,程序应该输出:
1 3 3
1 2 4
3 4

为了方便,不妨假设所有的金额都是整数;每笔金额不超过1000,金额的明细条数不超过100。

这道题目与立方和等式那道题有点类似,都是在一组数中不重复的取数,只不过那道题是排列,而这道题是组合,也就是从题目中给出的一组数据num[]中找出几个数,他们的和为w_sum,也就是那个错误的总金额,而除了这几个数的其他数字就是我们要找的,用DFS搜索,给每个数字分配一个标记,表示是否已使用,如果递归到某一步的和超过w_sum了,那么直接结束,如果相等的话,说明找到了一组数据,我们需要先在结果数组result[]中搜索一下这组解是否已经存在,如果不存在,就存到数组中,最后,输出结果数组。

#include<iostream>
#include<stdio.h>
#include<memory.h>
#include<algorithm>
using namespace std;
int num[100],result[100][100],temp[100];
bool used[100];
int p,s;void init()
{p=0,s=0;memset(used,false,sizeof(used));for(int i=0;i<100;i++){num[i]=10000;for(int j=0;j<100;j++)result[i][j]=10000;}}void showResult()
{int i,j;for(i=0;i<p;i++){for(j=0;result[i][j]!=10000;j++)cout<<result[i][j]<<' ';cout<<endl;}
}bool cmp(int len)
{int i,j;for(i=0;i<p;i++){for(j=0;j<len;j++){if(result[i][j]!=temp[j])break;}if(j==len)return false;//正常退出说明存在一模一样的  }return true;
}void save(int n)
{int i,j,len;s=0;for(i=0;i<n;i++){if(used[i]==false){temp[s]=num[i];s++;}}len=s;s=0;if(cmp(len)){for(i=0;i<len;i++)result[p][i]=temp[i];p++;}}void search(int sum,int n,int w_sum)
{if(sum>w_sum)return;if(sum==w_sum){save(n);return;}for(int i=0;i<n;i++){if(used[i]==false){used[i]=true;search(sum+num[i],n,w_sum);used[i]=false;}}
}int main()
{init();int w_sum,n,i;cin>>w_sum>>n;for(i=0;i<n;i++){cin>>num[i];}sort(num,num+100);search(0,n,w_sum);showResult();return 0;
}

蓝桥杯 漏掉的账目明细 DFS搜索 数据处理相关推荐

  1. 蓝桥杯——漏掉的账目

    某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔.如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输入的第一行是 ...

  2. 蓝桥杯c语言试题幸运数,蓝桥杯  历届试题 幸运数  dfs

    时间限制:1.0s   内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成 . 首先从1开始写出自然数1,2,3,4,5,6,. ...

  3. 蓝桥杯T35 危险系数(DFS)

    title: 蓝桥杯T35 危险系数(DFS) date: 2018-11-26 17:30:39 tags: [算法,蓝桥杯,DFS] categories: [算法] Description 抗日 ...

  4. 蓝桥杯.地宫取宝(记忆化搜索)

    Question: Solve: a.第一眼审题看到从左上角走到右下角,dfs b.再继续看题目,有限定条件: 1.走到一个位置依据已拿宝物的最大价值 maxn 选择是否拿宝 2.只有走到右下角且拿宝 ...

  5. 蓝桥杯考前的挣扎(DFS)

    明天是18年的蓝桥杯,没怎么好好准备的我今天做了点什么?抓了一把DFS,因为做了15-17年的题感觉DFS是无奈之下最好用的算法吧.(毕竟暴力杯)但是从17年开始难度明显上升,仅仅靠DFS恐怕有点问题 ...

  6. 蓝桥杯:作物杂交 (DFS)

    目录 题目描述 输入描述 输出描述 输入输出样例 输入 输出 样例说明 思路(DFS): AC代码(Java): 题目链接 题目描述 作物杂交是作物栽培中重要的一步.已知有 N种作物 (编号 1 至  ...

  7. 27.蓝桥杯之漏掉的账目明细

    某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔. 如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输入的第一行 ...

  8. java实现漏掉的账目明细

    某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔.如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输入的第一行是 ...

  9. [蓝桥杯2017初赛]方格分割-dfs+思维

    解题思路: 这是大佬的思路: 这道题可能上来会想到搜格子,但搜格子意味着更高的复杂度以及判连通的需要,本题似乎搜索要切开的边更优.由题意,这一条切割线必定经过图的中心点,那么我们一旦确定了半条到达边界 ...

最新文章

  1. ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries......
  2. 网游服务端php5.1时间戳格式化,php格式化时间戳显示友好时间的简单示例
  3. 怎么更改sql的实例版本_学会复杂一点的SQL语句:Oracle DDL和DML
  4. 利用 VBA 和 HTML自制兼容 WPS及 EXCEL(32位/64位)的颜色选择器
  5. STN可以增强CNN网络
  6. 博客积分为0,这是又出错了?
  7. 影视后期好学吗?C4D精品教学合集,看完必成大神!(附链接)
  8. Molecule在GitHub与Gitee正式开源
  9. 基于php工程项目管理系统——计算机毕业设计
  10. 请正视抑郁症(附Zung氏抑郁自评量表(SDS))
  11. 【保姆级教程】STK3332系列环境光传感器整理!STK333X
  12. 全球电动汽车充电标准最详解析
  13. 【Win10】电脑麦克风录音:设备调测
  14. DenseFuse :A Fusion Approach to Infrared and Visible Images解读
  15. 如何实施一套现代化的 IAM 系统?
  16. 汽车与计算平台产业链
  17. 中兴蓝剑计划与华为15级大佬教你如何做校招简历!
  18. SQL Server Integration Services(SSIS) 包配置与部署
  19. 一张图读懂基于微信硬件平台的物联网架构
  20. 通信行业会不会重蹈A380的覆辙?

热门文章

  1. lvgljs,用 javascript 来写 lvgl UI
  2. CS231n课程笔记翻译:神经网络笔记3(下)
  3. html输入符号%3e,html常用特殊符号
  4. 14岁女孩离家出走:父母不会好好说话,孩子有多受伤?
  5. 二维数组及其二维数组的动态内存分配
  6. 新零售:以消费者为中心的泛零售形态
  7. 证明lnx的导数等于1/x
  8. 2022.2.14判断第一类买点
  9. HTML5学习笔记2
  10. 国仁猫哥:快手小店开通流程和商品上架具体操作步骤。【值得收藏】