漏掉的账目(用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个整数. 输出格式 ...
随机推荐
- Tomjson - json 解析库
Tomjson - 一个"短小精悍"的 json 解析库 Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把 ...
- Oracle EBS-SQL (WIP-3):检查非标任务子件没选MRP净值.sql
SELECT WE.WIP_ENTITY_NAME, MSI.SEGMENT1, MSI.DESCRIPTION, WDJ.CLASS_CO ...
- Android Studio下载安装及配置图文教程
原文 http://jingyan.baidu.com/article/9c69d48f56835e13c9024e95.html AndroidStudio下载地址:https://develope ...
- umdh工具使用
先安装工具,http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx 选择其中的http://msdn.microsoft.com/ ...
- 转载文章:Windows Azure 基础结构服务上的 Microsoft Dynamics NAV 和 Microsoft Dynamics GP!
Windows Azure 基础结构服务(虚拟机和虚拟网络)可提供按需基础结构,该基础结构可进行伸缩以适应不断变化的业务需求.无论您是在虚拟机中创建新应用程序,还是运行现有应用程序,我们都将按分钟收费 ...
- CodeForces 540B School Marks(思维)
B. School Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- extern外部方法使用C#简单样例
外部方法使用C#简单样例 1.添加引用using System.Runtime.InteropServices; 2.声明和实现的连接[DllImport("kernel32", ...
- 服务管理——ntp
一 ntp相关知识 什么是时间同步服务器 Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可 ...
- android入门——BroadCast(2)
自定义广播 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&q ...
- javascrip格式
1:若Button_Search_onclick()方法不存则在页面在火狐浏览器是可以正常运行,但是在IE浏览器就会出现问题 建议删除没用到的方法