Генерация новых случайных чисел с каждым перезапуском программы

Не секрет, что если для генерации числовых данных использовать функцию rand, то при перезапуске программы мы будем постоянно получать одни и те же сгенерированные псевдослучайные числа. В большинстве «больших» сред программирования, типа C++ Builder, Visual Studio, есть возможность включить опцию в настройках и избавиться от подобного эффекта. Однако, в Dev C++ такой опции нет.
Можно воспользоваться таким кодом:


#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
	srand(time(NULL));
	int a=rand();
	cout << a;
	return 0;
}

В данном случае srand(time(NULL)) позволяет генерировать значения с привязкой ко времени исполнения.

Типы данных C++

Тип Диапазон значений Размер (байт)
bool true и false 1
signed char -128 … 127 1
unsigned char 0 … 255 1
signed short int -32 768 … 32 767 2
unsigned short int 0 … 65 535 2
int -2 147 483 648 … 2 147 483 647 4
signed long int -2 147 483 648 … 2 147 483 647 4
unsigned long int 0 … 4 294 967 295 4
float 3.4e-38 … 3.4e+38 4
double 1.7e-308 … 1.7e+308 8
long double 3.4e-4932 … 3.4e+4932 10

Реализация sign на C++

Sign позволяет определить знак числа.
sgn(x), при x>0 возвращает 1, при x<0 возвращает −1, при x=0 возвращает 0. Данная функция полезна в робототехнике при граничных переходах.
template short int sgn(T val) {
return (T(0) < val) − (val < T(0));
}
основа взята со stackoverflow.com

Урок физкультуры

Задача L. Урок физкультуры
На уроке физкультуры тренер Андрей Сергеевич выстраивает учеников в одну шеренгу.Вшеренге сначала идут мальчики, а потом девочки. При этом мальчики в шеренге стоят по невозрастанию роста, аналогично девочки тоже стоят по невозрастанию роста. Таким образом, следом за самым низким мальчиком стоит самая высокая девочка. Андрея Сергеевича заинтересовал вопрос, какое максимальное различие в росте двух стоящих рядом учеников. Напишите программу, которая поможет Андрею Сергеевичу ответить на этот важный для него вопрос.
Формат входных данных Первая строка содержит целое число n — число учеников в классе (2 ≤ n ≤ 50). Следующие n строк содержат по два целых числа каждая: ai и hi — пол и рост в сантиметрах i-го ученика (ai равно 0 или 1, 100 ≤ hi ≤ 200). Значение ai = 0 означает, что i-й ученик — мальчик, а значение ai = 1 означает, что i-й ученик — девочка. Формат выходных данных Выведите одно число — максимальное различие в росте стоящих рядом учеников после того, как они выстроятся в шеренгу на уроке физкультуры.
Пример стандартный ввод стандартный вывод
6 //6 учеников
0 120
1 130
1 142
1 115
0 145
0 134
22 //вывод разницы в росте
Continue reading

Исполнитель «Калькулятор»

Исполнитель «Калькулятор» может с заданным числом X выполнить одну из трех операций и получить новое число. Возможные операции:
Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X на 3.
Определите, какое наименьшее число операций необходимо для того, чтобы получить из числа 1 заданное число N.
ВХОДНЫЕ ДАННЫЕ
Программа получает на вход одно число N, не превосходящее 106.
ВЫХОДНЫЕ ДАННЫЕ
Программа должна вывести одно число — наименьшее количество операций, необходимых для получения из числа 1 числа N.
ПРИМЕР

ввод вывод
1 0
5 3
962340 17

Continue reading

Задача про кузнечика

Кузнечик на плоскости. У него есть 2 варианта движения – на одну клетку вправо, на одну клетку вниз. Сколько способов насекомому прийти в клетку (N; M)? Даны N, M (N, M < 20).

#include <iostream> using namespace std; int main() { system("chcp 1251 > nul"); int i,j,n,m; cin>>n>>m; int a[n][m]; for(i=0;i<n;i++) for (j=0;j<m;j++) if (i==0 || j==0) a[i][j]=1; for(i=1;i<n;i++) for (j=1;j<m;j++) a[i][j]=a[i-1][j]+a[i][j-1]; cout <<a[n-1][m-1]; return 0; }

С краткой теорией по динамическому программированию можно ознакомиться по адресу http://habrahabr.ru/post/113108/

ЕГЭ ГИА. Часть 2

Одна из однотипных задач 2-й части ГИА.
Краткий пересказ задачи:
Производится N измерений. Среди результатов необходимо выбрать третий по величине. Одинаковые результаты засчитываются за одно измерение. Если трех различных результатов не набралось — вывести «#». Обеспечить эффективность по памяти.
Continue reading

VBA выделение цифр числа

Три варианта разбивки числа (в данном случае четырехзначного) на цифры его составляющие, один пример логичной комбинации двух способов и один пример получения цифр числа без указания его размерности.

Sub ost()
Dim I As Integer, a As Integer, b As Integer, c As Integer, d As Integer
I = InputBox("enter I")
a = I  1000
b = (I Mod 1000)  100
c = (I Mod 100)  10
d = I Mod 10
MsgBox (a & b & c & d)
End Sub


Sub ost1()
Dim I As Integer, a As Integer, b As Integer, c As Integer, d As Integer
I = InputBox("enter I")
a = I  1000
b = (I - a * 1000)  100
c = (I - a * 1000 - b * 100)  10
d = I - a * 1000 - b * 100 - c * 10
MsgBox (a & b & c & d)
End Sub


Sub ost2()
Dim I As Integer, a As Integer, b As Integer, c As Integer, d As Integer
I = InputBox("enter I")
d = I Mod 10
c = (I Mod 100 - d) / 10
b = (I Mod 1000 - c * 10 - d) / 100
a = (I - b * 100 - c * 10 - d) / 1000
MsgBox (a & b & c & d)
End Sub


Sub ost3()
Dim I As String, a As Integer, b As Integer, c As Integer, d As Integer
I = InputBox("enter I")
a = Val(Mid(I, 1, 1))
b = Val(Mid(I, 2, 1))
c = Val(Mid(I, 3, 1))
d = Val(Mid(I, 4, 1))
MsgBox (a & b & c & d)
End Sub


Sub ost4()
Dim I As Integer, a As Integer, str As String
I = InputBox("enter I")
While I > 9
a = I Mod 10
str = a & str
I = (I - a) / 10
Wend
str = I & str
MsgBox (str)
End Sub

Решение задачи C4 из ЕГЭ. C++. Сортировка ассоциативных массивов по значению.

Типовая задача C4 ЕГЭ:
В командных олимпиадах по программированию для решения предлагается не больше 11 задач. Команда может решать предложенные задачи в любом порядке. Подготовленные решения команда посылает в единую проверяющую систему соревнований. Вам предлагается написать эффективную, в том числе по используемой памяти, программу, которая будет статистически обрабатывать пришедшие запросы, чтобы определить популярность той или иной задачи. Continue reading