【SEU程序设计课笔记】 Mooc - Chapter 6 - 数值法/获取系统时间

Mooc 课程:程序设计基础——发现计算之美
李骏扬 、魏海坤 、仰燕兰 、朱蔚萍 、杨万扣
网址:https://www.icourse163.org/course/SEU-1003771004


题目

一张边长为 a 的正方形纸张,如下图所示,裁去四角边长为 h 的正方形,然后折成一个开口的长方体,请问,h取值多少,该长方体体积最大?
题目

程序

#include <iostream>
#include <cmath>
#include <chrono>
#include <Windows.h>
using namespace std;
using namespace chrono;

inline double V(double a, double x)
{
	return pow(a - 2 * x, 2) * x;
}

/**
 * Way 1
 * The maximum is the value that is larger than numbers beside.
 * complicated and not so accurate
 */
double Way1(double a)
{
	double step = a / 1E5;
	double max_V = 0;
	double max_i = 0;
	for (double i = 0; i < a; i += step)
	{
		if ((V(a, i) - V(a, i - step) >= 0) && (V(a, i) - V(a, i + step) >= 0) && V(a, i) > max_i)
		{
			max_V = V(a, i);
			max_i = i;
		}
	}
	return max_i;
}

/**
 * Way 2
 * Use the derivative to find the maximum.
 * easy, quick and accurate
 */
double Way2(double a)
{
	return a / 6;
}

int main(int argc, char** argv)
{
	double a;
	cin >> a;
	auto init_time = chrono::system_clock::now();
	cout << "Way 1: x = " << Way1(a) << ", Time cost: " << duration_cast<nanoseconds>(system_clock::now() - init_time).count() << "ns" << endl;
	init_time = chrono::system_clock::now();
	cout << "Way 2: x = " << Way2(a) << ", Time cost: " << duration_cast<nanoseconds>(system_clock::now() - init_time).count() << "ns" << endl;
	return 0;
}

输出示例

Output

分析

数值法

直接求导数简单啊!

获取系统时间

如果使用ctime库里的clock()函数,只能精确到毫秒,有时候不够用。
此时出使用C++/11中定义的库chrono,要using namespace chrono;
(Windows/精确到1E-7s)
此处duration_cast的类型是nanoseconds(纳秒),也可以调成microseconds(微秒)。


ALL RIGHTS RESERVED © 2020 Teddy van Jerry
欢迎转载,转载请注明出处。


See also

Teddy van Jerry 的导航页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值