小明买书
来源:互联网 发布:计价软件 编辑:程序博客网 时间:2024/06/06 00:01
小明假期同爸爸一起去书店,他选中了六本书,每本书的单价分别为:3.1,1.7,2,5.3,0.9和7.2。不巧的是,小明的爸爸只带了十几块钱,为了让小明过一个愉快的假期,爸爸扔然同意买书,但提邮购一个要求,要小明从六本书中选出若干本,使得单价相加所得的和同10最接近。你能够帮助小明解决这个问题吗?
*问题分析与算法设计
分析题意,可将题目简化为:从六个数中选出若干个求和,使得和与10的差值最小。
题目中隐含两个问题,其一是怎样从六个数中选出若干个数;其二是求与10的差。
从六个数中选出若干个数实质是从六个数中选出若干个进行组合。每个数在组合过程中只有两种情况:要么是选中参加求和,要么是没选中不参加求和。这样就可以使用六重循环对每个数是否参加求和进行全部可能情况的组合。
10(+ -)0.10=2.00+0.90+7.20
10(+ -)0.10=1.70+2.00+5.30+0.90
10(+ -)0.10=3.10+1.70+5.30
*问题分析与算法设计
分析题意,可将题目简化为:从六个数中选出若干个求和,使得和与10的差值最小。
题目中隐含两个问题,其一是怎样从六个数中选出若干个数;其二是求与10的差。
从六个数中选出若干个数实质是从六个数中选出若干个进行组合。每个数在组合过程中只有两种情况:要么是选中参加求和,要么是没选中不参加求和。这样就可以使用六重循环对每个数是否参加求和进行全部可能情况的组合。
关于求与10的差值应当注意的是:差值的含义是指差的绝对值。例如:“9-10=-1"和"11-10=1",但9和11这两者与10的差值都是1。若认为”9“与”10的差值为-1就错了。
#include <stdio.h>#include <math.h>int main(){ int d[6], m, i, j; long b[63], flag; float c[6], min, x; printf("Please enter the prices of 6 books:"); for (i = 0; i < 6; i++) scanf("%f", &c[i]); for ( i = 0, min = -1, d[0] = 0; d[0] < 2; d[0]++) for (d[1] = 0; d[1] < 2; d[1]++) for (d[2] = 0; d[2] < 2; d[2]++) for (d[3] = 0; d[3] < 2;d[3]++) for (d[4] = 0; d[4] < 2; d[4]++) for (d[5] = 0; d[5] < 2; d[5]++) { for (flag = 0, x = 0, j = 5; j >= 0; j--) { x += c[j]*d[j]; flag = flag*10 + d[j]; } x = ((x - 10 > 0) ? x - 10 : 10 - x); if (min < 0) { min = x; b[i++] = flag; } else if (min - x > 1.e-6) { min = x; b[0] = flag; i = 1; } else if (fabs((double)x - min) < 1.e-6) { b[i++] = flag; } } for (m = 0; m < i; m++) { printf("10(+ -)%.2f=", min); for (flag = b[m], j = 0; flag > 0; j++, flag /= 10) if (flag % 10) { if (flag > 1) { printf("%.2f+", c[j]); } else { printf("%.2f\n", c[j]); } } } return 0;}Please enter the prices of 6 books:3.1 1.7 2.0 5.3 0.9 7.2
10(+ -)0.10=2.00+0.90+7.20
10(+ -)0.10=1.70+2.00+5.30+0.90
10(+ -)0.10=3.10+1.70+5.30
阅读全文
0 0
- 小明买书
- 小明买书
- P65-小明买书
- 数的变幻(小明买书)
- (百例编程)76.小明买书
- 使用virt-manager创建openstack qcow2镜像
- 浅析Java进程与多线程的差别
- linux学习笔记之查看文件状态及修改文件时间
- arp脚本
- linux学习笔记之帮助命令与压缩解压缩命令
- 小明买书
- Android系统源码编译之5---安装xshell android环境 环境配置以及安装jdk
- Tensorflow手写数字识别之简单神经网络分类与CNN分类效果对比
- 一个能够Bypass大部分杀软的工具:avoidz-master
- 32、不一样的C++系列--函数模板
- 设计模式之备忘录模式
- 一个通用的Makefile
- SVN authz 配置详解 转载
- 一种Unable to build NVIDIA kernal module的解决方法