首页 > 编程语言 >金额查错C++

金额查错C++

时间:2023-04-16 09:23:05浏览次数:33  
标签:set int 金额 C++ ++ 查错 str strcmp loal

一、题目

题目描述

某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某 1 笔或几笔。如果已知明细账目清单,能通过编程找到漏掉的是哪 1 笔或几笔吗?

如果有多种可能,则输出所有可能的情况。

输入描述

用户输入的第一行是:有错的总金额。

接下来是一个整数 n,表示下面将要输入的明细账目的条数。

再接下来是 n 行整数,分别表示每笔账目的金额。

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

输出描述

所有可能漏掉的金额组合。每个情况 1 行。金额按照从小到大排列,中间用空格分开。

 

二、我的思路

  1、首先按题目要求将数据接收存放到数组里面,然后使用冒泡排序将每一笔的金额从小到大排序。

  2、使用递归遍历每一种金额的组合。

  3、在遍历每一种组合的时候,当遇到了需要的金额,如果在新的数组里没有该组合,将该组合放到新的数组里面。

  4、当存放完成后,输出该组合到屏幕上,然后退出该分支。

 

三、代码

#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int length = 1000;
int loal = 0;

string* str = new string[length];

//a[]是数组	x是上一级的金额	N是一共有多少笔钱	  n是循环开始  set是标记数组	em是要的金钱
void dfs(int a[], int x, int N, int n, int em, char set[]) {
	if (x == em) {
		//当当前的存储长度小于总长度时可以进行存储操作
		if (loal < length) {
			string strcmp_1;
			//先将set数组的值放到strcmp_1数组里面
			for (int i = 0; i < N; i++) {
				if (set[i] != '0') {
					strcmp_1 += set[i];
				}
			}
			//遍历当前的str,查看是否有一样的,如果没有就输出set(当前的符合题目输出的数组)
			int t = 0;
			for (t = 0; t < loal; t++) {
				//使用临时存储的strcmp_1与str中的所有字符串比较,如果有一样的那就跳出循环
				if (!strcmp(strcmp_1.c_str(), str[t].c_str())) {
					break;
				}
			}
			//如果t>大于当前的loal说明没有相同的
			if (t >= loal) {
				//将当前的strcmp_1存放到str中
				str[loal] = strcmp_1;
				loal++;
				//输出当前的组合
				for (int i = 0; i < N; i++) {
					if (set[i] != '0') {
						cout << set[i] << " ";
					}
				}
				cout << endl;
			}
		}
		return;
	}

	//递归使用递归进入每一种组合的分支
	for (int i = n; i < N; ++i) {
		set[i] = a[i] + '0';
		dfs(a, a[i] + x, N, ++n, em, set);
		set[i] = '0';
	}
}

int main()
{
	// 请在此输入您的代码
	//每笔金额的数组
	int a[100];

	//存放修改该后的数组
	char set[1000];

	//给数组清零
	memset(set, '0', sizeof(set));

	//一共多少笔
	int mark = 0;

	//错误的金额
	int jing = 0;

	//全部钱加起来
	int sum = 0;

	cin >> jing;
	cin >> mark;

	//输入每笔金额
	for (int i = 0; i < mark; i++) {
		cin >> a[i];
		sum += a[i];
	}
	//先使用冒泡排序,由 小到大排序
	int temp = 0;
	for (int i = 0; i < mark; i++) {
		for (int j = i; j < mark; ++j) {
			if (a[i] > a[j]) {
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
	//使用递归
	dfs(a, 0, mark, 0, sum - jing, set);

	return 0;
}

  

四、结束

  为了美好的明天,继续加油吧

标签:set,int,金额,C++,++,查错,str,strcmp,loal
From: https://www.cnblogs.com/kianaz/p/17322535.html

相关文章

  • C++20 Corountine
    背景C++20内引入了 co_yield,co_await,co_return三个关键字。任何函数在使用了这三个关键字中的任何一个后,都会被编译器视作协程函数,进行一些特殊编译处理。协程介绍协程其实就是用户态的线程(粗略的定义),协程的切换完全是在用户态进行,不需要陷入到内核态,因此切换的开销远......
  • 恶意代码分析实战 lab 20-1 20-2 20-3 C++恶意代码分析
    本次实验我们将会分析lab20-1,lab20-2文件。先来看看要求解答的问题Lab20-1需要回答的问题如下Q1.在0x401040处的函数采用了什么参数?Q2.哪个URL被用来调用URLDownloadToFile?Q3.这个程序做了什么事情?Lab20-2需要回答的问题如下:Q1.在这个程序中,你可以从有趣的字符串中了......
  • C/C++运动场馆预订管理系统[2023-04-15]
    C/C++运动场馆预订管理系统[2023-04-15]题目14:运动场馆预订管理系统对旅游管理进行简单模拟。运动场地管理:包括场地名称(如羽毛球场A、乒乓球场B等)、开放时间、计费时长、价格。注意:场地可能增减、同一场地的租金在不同时间段可能不同。用户信息管理:包括用户姓名、联系方式等信......
  • C++课本第三章课后习题 3-7
    完成函数,参数为两个unsigned short int 型数,返回值为第一个参数除以第二个参数的结果,数据类型为short int;如果第二个参数为0,则返回值为一1。在主程序中实现输入输出。#include<iostream>usingnamespacestd;shortintnumber(unsignedshortintx,unsi......
  • C++中的虚函数表实现机制——对于虚表的内存布局讲解得非常好
    C++中的虚函数表实现机制摘自:https://blog.twofei.com/496/前言大家都应该知道C++的精髓是虚函数吧?虚函数带来的好处就是:可以定义一个基类的指针,其指向一个继承类,当通过基类的指针去调用函数时,可以在运行时决定该调用基类的函数还是继承类的函数.虚函数是实现多态(......
  • 内存对齐详解 (C++代码)
    内存对齐详解(C++代码)目录内存对齐详解(C++代码)Test1:结构体对齐Test2:时间开销对比我每天都有读一下面经的习惯,从里面抽一些我不太懂的内容使用dfs的思想去探索,感谢有了GPT4,探索之路变得有趣和高效许多。今天这个Topic如下,是腾讯日常实习面经中的内容编译内存相关:C+......
  • c++20协程实现await及suspend效果
    例子是掌握c++20协程的的起点,网上很多的协程资料说的很复杂,但是例子举得都太差劲了,我这里写了一个可以await与suspend的列子。1.协程的基本框架//suspend.cpp#include<chrono>#include<coroutine>#include<functional>#include<iostream>#include<memory>#include......
  • auto C++11
    类成员或结构体成员也不可以定义为auto。auto作为函数返回值,需要注意的点:当函数使用多条判断语句时,可能有多条return语句,此时所有语句的返回类型必须一致,否则auto会报错。当函数没有return语句时,auto会被推导为void。如果声明和实现分离了,则不能声明为auto。比如:au......
  • C++基础知识系列-1
    C++基础知识1git基础SVN(集中式版本控制器)和git(分布式版本控制器)区别​ SVN本地没有仓库信息存储代码,代码信息全部存储到云端。本地代码全部push到云端。​ git好处:版本库对提交的代码保存其版本提交记录;每次提交代码push之前先拉取代码pull,再次push时只会push经过改动的地方......
  • C++基础知识系列-3
    设计模式GoF设计模式清单工厂模式和抽象工厂模式在实际开发中使用较少;单例模式是重点,针对一个类的唯一实例;单例模式:通过设计的接口getInstance()获得对象,在接口内部设计只能有一个对象。将类的构造函数定义为私有属性【外部不能创建对象】;定义一个私有的类的静态私有成员变量......