蓝桥杯 漏掉的账目明细 DFS搜索 数据处理
某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某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笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输入的第一行是 ...
- 蓝桥杯c语言试题幸运数,蓝桥杯 历届试题 幸运数 dfs
时间限制:1.0s 内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成 . 首先从1开始写出自然数1,2,3,4,5,6,. ...
- 蓝桥杯T35 危险系数(DFS)
title: 蓝桥杯T35 危险系数(DFS) date: 2018-11-26 17:30:39 tags: [算法,蓝桥杯,DFS] categories: [算法] Description 抗日 ...
- 蓝桥杯.地宫取宝(记忆化搜索)
Question: Solve: a.第一眼审题看到从左上角走到右下角,dfs b.再继续看题目,有限定条件: 1.走到一个位置依据已拿宝物的最大价值 maxn 选择是否拿宝 2.只有走到右下角且拿宝 ...
- 蓝桥杯考前的挣扎(DFS)
明天是18年的蓝桥杯,没怎么好好准备的我今天做了点什么?抓了一把DFS,因为做了15-17年的题感觉DFS是无奈之下最好用的算法吧.(毕竟暴力杯)但是从17年开始难度明显上升,仅仅靠DFS恐怕有点问题 ...
- 蓝桥杯:作物杂交 (DFS)
目录 题目描述 输入描述 输出描述 输入输出样例 输入 输出 样例说明 思路(DFS): AC代码(Java): 题目链接 题目描述 作物杂交是作物栽培中重要的一步.已知有 N种作物 (编号 1 至 ...
- 27.蓝桥杯之漏掉的账目明细
某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔. 如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输入的第一行 ...
- java实现漏掉的账目明细
某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔.如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输入的第一行是 ...
- [蓝桥杯2017初赛]方格分割-dfs+思维
解题思路: 这是大佬的思路: 这道题可能上来会想到搜格子,但搜格子意味着更高的复杂度以及判连通的需要,本题似乎搜索要切开的边更优.由题意,这一条切割线必定经过图的中心点,那么我们一旦确定了半条到达边界 ...
最新文章
- ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries......
- 网游服务端php5.1时间戳格式化,php格式化时间戳显示友好时间的简单示例
- 怎么更改sql的实例版本_学会复杂一点的SQL语句:Oracle DDL和DML
- 利用 VBA 和 HTML自制兼容 WPS及 EXCEL(32位/64位)的颜色选择器
- STN可以增强CNN网络
- 博客积分为0,这是又出错了?
- 影视后期好学吗?C4D精品教学合集,看完必成大神!(附链接)
- Molecule在GitHub与Gitee正式开源
- 基于php工程项目管理系统——计算机毕业设计
- 请正视抑郁症(附Zung氏抑郁自评量表(SDS))
- 【保姆级教程】STK3332系列环境光传感器整理!STK333X
- 全球电动汽车充电标准最详解析
- 【Win10】电脑麦克风录音:设备调测
- DenseFuse :A Fusion Approach to Infrared and Visible Images解读
- 如何实施一套现代化的 IAM 系统?
- 汽车与计算平台产业链
- 中兴蓝剑计划与华为15级大佬教你如何做校招简历!
- SQL Server Integration Services(SSIS) 包配置与部署
- 一张图读懂基于微信硬件平台的物联网架构
- 通信行业会不会重蹈A380的覆辙?