[存档!]纯数学、物理学、化学等:与贸易没有任何关系的大脑训练问题 - 页 233

 

一般来说,无意冒犯MQL的开发者,但数学函数的数量https://docs.mql4.com/ru/math

在我看来,它是可耻的小,就像在VB.NET中一样。而其中一些的定义,如MathFloor,是模糊的。

-

以MathMax函数为例,只有2个参数。而如果我需要10个或20个,那么会变成什么呢?

下面是我的模块在VB中的样子。

-

x=max(x1...x20) '找到20个变量的最大值。

x=max(x1, y, z, p) '找到四个变量的最大值。

 
MaStak >>:

А вобще, какой то грек сказал что Pi=66/21

希腊文一定是说22/7(与66/21相同)。

更准确的是355/113(精确度为3*10^(-7) )。

下一个最好的分数已经是103993/ 33102(精确度在6*10^(-10)的范围内)。

2 Richie: 嗯,你也必须完成VB。那么,你为什么要去追寻Metacquotes呢?

 
先生们,终于有创意了重点不是用这个程序来寻找π,而是解读这个程序是如何做到的。阅读主题:"......大脑训练问题......"。这个节目来自 "C语言的乐趣 "系列。有一个竞赛,是关于组成最晦涩和神秘的C语言算法。你有源代码和结果,但你需要弄清楚操作的原理。算法本身就是要解决的任务。它需要被 "破解"。这需要你 "打破 "你的大脑。
 

开个玩笑


 
Mischek писал(а)>>

幽默

Mischek, 我们是 前研究生,我们解决的是8年级的问题,而不是11年级的问题 :)

可怜的孩子。

 
C-4 >>: Сам алгоритм - это и ест задача для решения. Его надо "взломать". Для этого требуется "поломать" свой мозг.

你去那里,我怀疑这是一个问题......

好吧,让我们看看。

int a=10000, b, c=2800, d, e, f[2801], g;
int main(void){
   for(; b- c;) f[ b++]= a/5;
   for(; d=0, g= c*2; c-=14,printf("%.4d", e+ d/ a), e= d% a)
      for( b= c; d+= f[ b]* a, f[ b]= d%-- g, d/= g--,-- b; d*= b);
}

让我们来处理第一个循环。

   for(; b- c;) f[ b++]= a/5;

只要表达式b-c被评估为真,该循环就会被执行。在C语言中什么是真的?任何不为零的东西,似乎都是如此。因此,从零开始增加b并填充数组f[]的循环被执行,直到b等于c,也就是直到2800。数组f[]被填入相同的数字10000/5=2000。

到目前为止没有什么问题?

 

反正只有一种方法可以计算圆周率,其余的都是穿着不同裙子的马什卡,或者马什卡的一部分 :)

 
Mathemat >>:

Ну вот, подозревал ведь, что это задачка...

ОК, смотрим.

Разбираемся с первым циклом,

Цикл выполняется до тех пор, пока b - c = true. Что такое true в Си? Кажись, любой не нуль. Значит, цикл увеличения b от нуля и заполнения массива f[] выполняется до тех пор, пока b не сравняется с с, т.е. до 2800. Массив f[] заполняется одинаковыми числами 10000/5 = 2000.

Пока не сильно ошибся?

让我们试一试吧。

到目前为止是对的。让我们继续关注。

 

但再往后就不清楚了。第一个标题(外循环)中的条件d=0,不知为何困扰着我。它总是真实的吗?

 

接下来是一个嵌套循环。我们改写它。

for( ; g= c*2; )
{
d=0;
   for( b= c; -- b; d*= b)
{
d += f[ b] * a;
g
--;
 f[ b] = d % g;
 d /= g;
g--;
}
c-=14;
printf("%.4d", e+ d/ a);
e= d% a;
}
顺序在这里特别重要。  检查我是否还没有撒谎? 
然后我们继续前进。

//其实说起来for(; g=c*2; )在这个版本中会好很多: for( g=c*2; g !=0; )