百钱买百鸡问题
来源:互联网 发布:淘宝饰品创业计划书 编辑:程序博客网 时间:2024/06/14 20:19
数据结构老师让我深深体会到了算法的美!一个看似简单的百钱买百鸡的问题实则有很多奥秘和技巧
//@auther Yang Zongjun#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <string>#include <cstring>using namespace std;#define PI acos(-1.0)#define EPS 1e-8const int MAXN = 1100000;const int INF = 2100000000;/*题目描述: 有一百元钱去买一百只鸡,其中公鸡每只5元,母鸡每只3元, 小鸡每3只一元,求所有可能的解*/int main(){ //freopen("C:/Users/Administrator/Desktop/input.txt", "r", stdin); //1.三重循环,最耗时,O(10^6) for(int i = 0; i <= 100; i++) { for(int j = 0; j <= 100; j++) { for(int k = 0; k <= 100; k++) { if(k%3==0 && i+j+k==100 && 5*i+3*j+k/3==100) printf("公鸡:%d 母鸡:%d 小鸡:%d\n", i, j, k); } } } printf("\n"); //2.二重循环,有所优化 for(int i = 0; i <= 100; i++) { for(int j = 0; j <= 100; j++) { int k = 100-i-j; if(k%3==0 && i+j+k==100 && 5*i+3*j+k/3==100) printf("公鸡:%d 母鸡:%d 小鸡:%d\n", i, j, k); } } printf("\n"); //3.二重循环,更加优化 for(int i = 0; i <= 20; i++) { for(int j = 0; j <= 33; j++) { int k = 100-i-j; if(k%3==0 && i+j+k==100 && 5*i+3*j+k/3==100) printf("公鸡:%d 母鸡:%d 小鸡:%d\n", i, j, k); } } printf("\n"); //4.一重循环,最简 for(int i = 0; i <= 14; i+= 4) {//i即公鸡一定是4的倍数且<= 14; int j = (100 - 7*i)/4; int k = 100-i-j; if(k%3==0 && i+j+k==100 && 5*i+3*j+k/3==100) printf("公鸡:%d 母鸡:%d 小鸡:%d\n", i, j, k); } printf("\n"); return 0;}
0 0
- 百钱买百鸡问题
- “百钱买百鸡”问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- 百钱买百鸡问题
- JavaScript表单验证示例
- SpringBatch的领域概念
- 深入理解计算机系统-第1章计算机系统漫游
- U盘安装 centos7 dev root does exist
- nginx---进程开启、关闭和重载配置文件
- 百钱买百鸡问题
- android开发步步为营之29:选项菜单OptionsMenu的用法
- 冒泡排序 java
- [笔试]阿里笔试-最长公共连续子序列
- 命令模式
- 线性表之单链表学习小结(初学数据结构必看)
- hdu 2242(边双联通分量)
- javase和javaee中获取文件路径的方法总结
- 最大匹配算法实现中文分词(讲解+代码)