漏掉的账目(用C语言去重)
问题描述:
如果有多种可能,则输出所有可能的情况。
我们规定:用户输入的第一行是:有错的总金额。
接下来是一个整数n,表示下面将要输入的明细账目的条数。
再接下来是n行整数,分别表示每笔账目的金额。
要求程序输出:所有可能漏掉的金额组合。每个情况1行。金额按照从小到大排列,中间用空格分开。
比如:
6
5
3
2
4
3
1
表明:有错的总金额是6;明细共有5笔。
此时,程序应该输出:
1 3 3
1 2 4
3 4
#include "stdio.h"
int n;//集合S中元素的个数
int c;//子集和的目标值
int cw;//当前子集和
int bestw;//当前的最优值
int w[100];
int x[100];//构成当前子集和的元素
int r; //集合S中剩余的所有的元素的和
int b[100][100],bb[100],a[100];
int p=0,k=0;
void f(int t)
{
if(t>n)
{
if(cw==c)
{
for(int i=1;i<=n;i++)
if(x[i])
{b[p][k++]=w[i];}
bb[p]=k;
p++;
k=0;
}
return ;
}
//更新剩余的所有元素的和
r-=w[t];
if(cw+w[t]<=c)//搜索左子树
{
x[t]=1;
cw+=w[t];
f(t+1);
cw-=w[t];
}
if(cw+r>bestw)//搜索又子树
{
x[t]=0;
f(t+1);
}
r+=w[t];//恢复状态
}
int main()
{
int m,i,j,tt,ii,jj;
r=0;cw=0;
scanf("%d",&m);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&w[i]);
r=r+w[i];
}
c=r-m;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
if(w[i]>w[j])
{
tt=w[i];w[i]=w[j];w[j]=tt;
}
}
f(1);
for(i=0;i<p;i++)
{
for(j=0;j<bb[i]-1;j++)
{
a[i]=b[i][j]*b[i][j+1];
}
}
for(ii=0;ii<p-1;ii++)
{
for(jj=ii+1;jj<p;jj++)
{
if(a[ii]==a[jj])
a[jj]=0;
}
}
for(i=0;i<p;i++)
{
if(a[i]==0) continue;
for(j=0;j<bb[i];j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
return 0;
}
漏掉的账目(用C语言去重)的更多相关文章
- java实现漏掉的账目明细
某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔.如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输入的第一行是 ...
- go语言的排序和去重
go语言的排序: https://blog.csdn.net/u010983881/article/details/52460998 go语言去重: https://blog.csdn.net/qq_ ...
- 1.2 Why Python for Data Analysis(为什么使用Python做数据分析)
1.2 Why Python for Data Analysis?(为什么使用Python做数据分析) 这节我就不进行过多介绍了,Python近几年的发展势头是有目共睹的,尤其是在科学计算,数据处理, ...
- 算法笔记_126:算法集训之编程大题集二(Java)
目录 1 连续数的公倍数 2 漏掉的账目明细 3 罗马数字转十进制 4 逻辑推断 5 平面4点最小距离 6 取球博弈 7 人民币金额大写 8 人员排日程 9 三角螺旋阵 10 手机尾号评分 1 ...
- R语言数据去重
R语言常用的去重命令有unique duplicated unique主要是返回一个把重复元素或行给删除的向量.数据框或数组 > x <- c(3:5, 11:8, 8 + 0:5)> ...
- C语言字符串/数组去重
输入: hello 输出: helo 第一种实现: 不新开数组, 也就是原地去重. #include <stdio.h> #include <string.h> void re ...
- C#NPOI.RabbitMQ.EF.Attribute.HttpRuntime.Cache.AD域.List<T>根据指定字段去重.前端JQuery.Cache.I18N(多语言).data-xx(自定义属性)
使用NPOI 操作Excel 个人使用的电脑基本默认安装Excel 操作起来 调用Excel的组件便可.如果是一台服务器.没有安装Excel,也就无法调用Excel组件. 在此推荐第三方插件.NPOI ...
- C语言对字符串去重
# include <stdio.h> # include <string.h> char * getNewChar(char * str,char * newStr); in ...
- C语言 · 数组排序去重
算法训练 数组排序去重 时间限制:1.0s 内存限制:512.0MB 问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 ...
随机推荐
- 【翻译】MVC Music Store 教程-概述(二)
1. 文件->新建项目 软件安装 此篇将从运用免费的Visual Web Developer 2010Express来创建ASP.NET MVC3开始,逐步的添加一些功能来创建一个完整的应用程序 ...
- nginx+redis 实现 jsp页面缓存,提升系统吞吐率
最近在开发的时候,发现之前APP客户端的一部分页面用的是webview交互,这些页面请求很多,打开一套试卷,将会产生100+的请求量,导致系统性能下降.于是考虑在最靠近客户端的Nginx服务器上做Re ...
- W5300E01-ARM 交叉编译器(Cross Compiler)用户手册
W5300E01-ARM是基于W5300的ARM功能测试评估板: 1 简介 当用户的开发环境与目标系统不同时就会用到交叉编译器. 例如,当开发基于ARM的嵌入式系统时,用户就需要在电脑上写出 ...
- 【OpenGL游戏开发之二】OpenGL常用API
OpenGL常用API 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数.它采用C语言风格,提供大量的函数来进行图形的处理和显示.OpenGL库函数的命名方式非常有规律.所有OpenGL ...
- docker 数据管理3
实际应用: 第一个容器使用: docker run -itd -v /data/:/data1 centos bash // -v 用来指定挂载目录, 后面的容器使用之前的容器数据卷 docker: ...
- 成都UBER优步司机第六组奖励政策
保底时段详解 滴滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs. ...
- Spring、Bean的生命周期
1.默认情况下,在Bean容器被实例化的时候,bean对象将被创建: public class PersonServiceImpl implements PersonIService { public ...
- HTTP的头部
if($this->GetHead("http-edition")=="HTTP/1.1") $httpv = "HTTP/1.1"; ...
- bootstrap注意事项(三)
1.<code> 标签用于表示计算机源代码或者其他机器可以阅读的文本内容.软件代码的编写者已经习惯了编写源代码时文本表示的特殊样式.<code> 标签就是为他们设计的.包含在该 ...
- VMware vCenter Converter 使用,Error code: 2147549183 (0x8000FFFF) 解决方案
在实际生产环境中,为了节省成本,会将实体机转换为虚拟机,从而虚拟化. 在公司数据中心环境的中跑VMware vCenter ConverterStandalone Client 4.3,将其中一台on ...