Можете объяснить код к задачи по строкам. адача №111159. Создание архива
Системный администратор вспомнил, что давно не делал архива пользовательских файлов.Однако, объем диска, куда он может поместить архив, может быть меньше чем суммарный объем архивируемых файлов.
Известно, какой объем занимают файлы каждого пользователя.
Напишите программу, которая по заданной информации о пользователях и свободному объему на архивном диске определит максимальное число пользователей, чьи данные можно поместить в архив, при этом используя свободное место как можно более полно.
Входные данные
Программа получает на вход в одной строке число
S
– размер свободного места на диске (натуральное, не превышает 10000), и число
N
– количество пользователей (натуральное, не превышает 100), после этого идет
N
чисел - объем данных каждого пользователя (натуральное, не превышает 1000), записанных каждое в отдельной строке.
Выходные данные
Выведите наибольшее количество пользователей, чьи данные могут быть помешены в архив.
Примеры
входные данные
100 2
200
50
выходные данные
1
входные данные m, b = map(int, input().split())
A = []
B = []
z = 0
sum = 0
while z < b:
A.append(int(input()))
z = z + 1
A = sorted(A)
for i in range(len(A)):
if sum < m:
B.append(A[i])
sum += A[i]
if sum > m:
B.pop()
print(len(B))
using namespace std;
int main() {
int mat[3][3];
int k;
int size=0;
int * arr=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
cin>>mat[i][j];
if (mat[i][j]>0){
arr=(int*)realloc(arr,sizeof(int)*(++size));
arr[size-1]=mat[i][j];
}
}
}
for(int i=0;i<size;i++){
cout<<arr[i];
}
delete arr;
cin.get();
cin.get();
return 0;
}
При использовании двоичной арифметики приходится сталкиваться с тем, что большинство нецелых чисел невозможно точно представить в двоичной системе, как нельзя, например, в десятичной системе точно представить в виде десятичной дроби число 1/3 = 0.333
Рассмотрим пример. Если в простых дробях (1/3) х 3 = 1, то в десятичных 0.3333 х 3 = 0.9999.
В двоичной машинной арифметике происходит аналогичная ситуация. Но если человек сознает, что результат 0.9999... - та же единица, то компьютер этого не понимает. В результате в компьютерной арифметике (1 / 3) х 3 не равняется единице.
Еще пример. Пусть нам надо вычислить значение функции в точках от -2π до 2π с шагом π/6. Человек будет использовать значения -2π, -11π/6, -10π/6 и т.д. пока не придет к точке 2π. Компьютер (в арифметике с обычной точностью) вычислит значение -2π как -6.283185, а шаг представит значением 0.5235988. Это приведет к тому, что когда мы придем к нулю, то получим значение аргумента -9.536743х10⁻⁷, а в конечной точке получим аргумент 6.283184, который по абсолютной величине отличается от начального на единицу в младшей цифре, т.е. для компьютера при таком последовательном счете |-2π| ≠ 2π.
Третий пример. отрицательные целые числа представляются в компьютере в дополнительном коде, когда старший разряд является знаковым: 0 - это плюс, 1 - это минус.
Пусть мы прибавляем к 127 единицу в арифметике целых чисел, которым в двоичном представлении отведен один байт:
1111111₂ + 1₂ = 10000000₂ - тут все понятно, единичка перешла в старший, восьмой разряд. Но ведь он ЗНАКОВЫЙ! И вместо двоичного эквивалента 128 в компьютерной арифметике мы получаем отрицательное число! Причем, что самое интересное, из соображений эффективности эта ситуация обычно аппаратно не контролируется и в результате программы могут вести себя очень странно.