优化程序的思维(C++)

简介: 题目分析:一百铜钱可以买一百只鸡。一只公鸡,5美元,一只母鸡,3美元,3个小的。一百只公鸡,母鸡,鸡,多少只?

题目分析:

一百铜钱可以买一百只鸡。一只公鸡,5美元,一只母鸡,3美元,3个小的。一百只公鸡,母鸡,鸡,多少只?

分析:

way one:

       我们直接三层暴力循环,因为不可能超过100只的同种鸡,那么三层循环,每层100次

PS:时间复杂度太高了,我们需要进一步优化

way two:

       由于公鸡5元,那么不可能买20只公鸡,则公鸡循环层为20,同理,母鸡3元,循环层为33,小鸡就使其循环层为100

PS:循环次数下降了不少,但是有没有进一步的优化呢

way three:

我们有这两个方程组:

       x+y+z=100------(1)        5x+3y+z/3=100------(2)

       消去z后可得:7x+4y=100,进一步得:y=25-7x/4(x可取0,4,8,12)(因为y为整数)

       那么,循环只用四次即可

代码如下:

#include <iostream>
#include <Windows.h>
using namespace std;
int main() {
  LARGE_INTEGER freq, start, end;
  QueryPerformanceFrequency(&freq);
  cout << freq.QuadPart << endl;
  int count;
  //方法1:
  QueryPerformanceCounter(&start);
  count = 0;
  cout << "方法1:" << endl;
  for (int cock = 0; cock < 100; cock++) {
    for (int hen = 0; hen < 100; hen++) {
      for (int chick = 0; chick < 100; chick += 3) {
        count++;
        if (((cock + hen + chick) == 100) && ((5 * cock + 3 * hen + chick / 3) == 100)) {
          cout << cock << "," << hen << "," << chick << endl;
        }
      }
    }
  }
  cout << "Count:" << count << endl;
  QueryPerformanceCounter(&end);
  cout << "Duration:" << end.QuadPart - start.QuadPart << endl;
  //方法2:
  QueryPerformanceCounter(&start);
  count = 0;
  cout << "方法2:" << endl;
  for (int cock = 0; cock < 20; cock++) {
    for (int hen = 0; hen < 33; hen++) {
      for (int chick = 0; chick < 100; chick += 3) {
        count++;
        if (((cock + hen + chick) == 100) && ((5 * cock + 3 * hen + chick / 3) == 100)) {
          cout << cock << "," << hen << "," << chick << endl;
        }
      }
    }
  }
  cout << "Count:" << count << endl;
  QueryPerformanceCounter(&end);
  cout << "Duration:" << end.QuadPart - start.QuadPart << endl;
  //方法3:
  QueryPerformanceCounter(&start);
  count = 0;
  cout << "方法3:" << endl;
  for (int cock = 0; cock < 16; cock += 4) {
    count++;
    int hen = 25 - 7 * cock / 4;
    int chick = 100 - cock - hen;
    cout << cock << "," << hen << "," << chick << endl;
  }
  cout << "Count:" << count << endl;
  QueryPerformanceCounter(&end);
  cout << "Duration:" << end.QuadPart - start.QuadPart << endl;
  cout << endl;
}
相关文章
|
1月前
|
安全 编译器 程序员
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
46 2
|
3月前
|
C++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
44 0
|
1月前
|
存储 程序员 编译器
简述 C、C++程序编译的内存分配情况
在C和C++程序编译过程中,内存被划分为几个区域进行分配:代码区存储常量和执行指令;全局/静态变量区存放全局变量及静态变量;栈区管理函数参数、局部变量等;堆区则用于动态分配内存,由程序员控制释放,共同支撑着程序运行时的数据存储与处理需求。
101 21
|
1月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化2
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
61 6
|
1月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化1
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
52 7
|
2月前
|
C++
【C++基础】程序流程结构详解
这篇文章详细介绍了C++中程序流程的三种基本结构:顺序结构、选择结构和循环结构,包括if语句、三目运算符、switch语句、while循环、do…while循环、for循环以及跳转语句break、continue和goto的使用和示例。
45 2
|
3月前
|
PHP C++ Python
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
63 0
|
3月前
|
C++
c++学习笔记03 程序流程结构
C++学习笔记,主要介绍了程序流程结构,包括顺序结构、选择结构和循环结构。选择结构中详细解释了if语句、三目运算符和switch语句的用法和注意事项。循环结构部分则涵盖了while循环、do-while循环和for循环的语法和使用技巧。此外,还介绍了跳转语句,包括break、continue和goto语句的用途和用法。
35 0
|
5月前
|
C语言 图形学 C++
|
5月前
|
编译器 C++ 开发者
C++一分钟之-返回值优化与Move Semantics
【6月更文挑战第19天】C++的RVO与移动语义提升效率,减少对象复制。RVO是编译器优化,避免临时对象的创建。移动语义通过右值引用和`std::move`转移资源所有权。注意RVO不是总有效,不应过度依赖。使用移动语义时,避免误用`std::move`导致对象无效。示例展示了RVO和移动构造函数的应用。理解并恰当使用这些机制能写出更高效代码。
64 3