Вскипетить воду
положить. или. налить. заварку
залить. кепитком.
по желанию. добавить. сахар
#include <iostream>
<span>#include <ctime>
</span><span>using namespace std;
</span>int main() {
<span> int n,m;
</span><span> FILE *fpt;
</span><span> cout<<"n = "; cin>>n;
</span><span> fpt=fopen("input.dat","wb");
</span><span> srand(time(NULL));
</span><span>// запись файла
</span><span> for (int i=0; i<n; i++) {
</span><span> m=rand()%8000-3000;
</span><span> cout<<m<<" ";
</span><span> fwrite(&m,sizeof(int),1,fpt);
</span><span> }
</span><span> cout<<endl;
</span><span> fclose(fpt);
</span><span> fpt=fopen("input.dat","rb+");
</span><span> int indf=0,indl=0,vf=0,vl=0,k=0;
</span><span>// чтение файла
</span><span> while (fread(&m,sizeof(int),1,fpt)!=0) {
</span><span> k++;
</span><span> if (!(m%2==0) && (indf==0)) { indf=k-1; vf=m; }
</span><span> if ((!m==0) && (m%2==0)) { indl=k-1; vl=m; }
</span><span> }
</span><span> cout<<"first odd = "<<vf<<" index = "<<indf<<endl;
</span><span> cout<<"last even = "<<vl<<" index = "<<indl<<endl;
</span><span>// обмен первого нечетного и последнего четного
</span><span> if (indf>0) {
</span><span> fseek(fpt,sizeof(int)*indf,SEEK_SET);
</span><span> fwrite(&vl,sizeof(int),1,fpt);
</span><span> }
</span><span> if (indl>0) {
</span><span> fseek(fpt,sizeof(int)*indl,SEEK_SET);
</span><span> fwrite(&vf,sizeof(int),1,fpt);
</span><span> }
</span><span> fclose(fpt);
</span><span> system("pause");
</span><span> return 0;
</span><span>}
</span>n = 6
<span>4368 2733 1112 2620 1941 753
</span><span>first odd = 2733 index = 1
</span><span>last even = 2620 index = 3
</span>
Следуя алгоритму, можно понять, что каждый "виток спирали" будет закончен цифрой, на 1 большей, чем цифра, с которой он начинался. Значит, можно заметить, что по диагонали, проходящей через центральную клетку таблицы, из правого верхнего угла в левый нижний, будут только числа 11. Значит и закончится спираль числом 11.
Условие попадания точки M(x,y) в треугольник с указанными координатами вершин можно описать системой неравенств:
Если положить в методе Монте-Карло x∈(-1,1), y∉(0,1) для вещественных х,y,
то площадь треугольника можно найти, как площадь прямоугольника, представленного в задании (она равна 2), умноженную на отношение количества точек, попавших в контур треугольника, к общему количеству точек.
// PascalABC.NET 3.0, сборка 1160 от 05.02.2016
begin
var n:=100000;
var k:=Range(1,n).Select(e->Rec(2*Random()-1,Random())).
Where(e->(e.Item2>=0) and (e.Item2<=e.Item1+1) and
(e.Item2<=1-e.Item1)).Count;
Writeln(2*k/n:0:3)
end.
<u><em>Тестовое решение:</em></u>1.001