1. Problem Description: The number of items per page in the Web shop is limited, and the total number of n (n > 0) Items is given, and only m (M > 0) Items are allowed on each page
Now ask for a line of expressions to calculate how many pages are needed to display all the items? Requirements: can only be expressed in one line,
And can only be used (parentheses, subtraction) operators, and others, such as comparison operators, can not be used.
2. At first I did not read the topic, thought that the study is (A? B:C) operation, so I started with the answer that I gave:
Return (M >= N)? 1: (((N-n/m*m) > 0) n/m + 1:n/m)
It turns out that's not the case ... The requirement is to use subtraction and parentheses to derive an expression to calculate the value.
3. Problem Analysis:
The idea of this problem is obviously this:
1). n/m figure out how many full pages are required (that is, each page shows M items)
2). Judge N%m is 0, if 0, means n divided by M can be done, the result is n/m + 0; if it is greater than 0, another page is displayed, that is, the result is n/m + 1;
So the point is to determine whether N m is greater than 0. Obviously the problem requires that the remainder operator (%) cannot be used, then we want to work out a method to calculate the residue.
The results are given directly according to the conditions of the subject: n% m = n-[n/m] * M. where [n/m] is the largest integer less than or equal to [n/m].
Because n,m are integers, they are written directly: n% m = n-n/m*m;
The remainder method has the following problem: If the remainder is 0, the result is n/m + 0, but if it is greater than 0, the result is n/m + 1, the remainder can be any integer less than M,
So how to use when the remainder is greater than 0 o'clock, it becomes + 1. That is, how much when the remainder does not know how many, can get 1, then how to get the remainder is added 0 or plus 1?
Method: observed that when the remainder is 0 o'clock, value = (remainder + m-1 = 0 + m-1 = m-1) < M, then value/m = 0;
When the remainder >=1, value = (remainder + m-1) >= m and value < M, so value/m = 1;
In this way, the remainder is added to the m-1 and then divided by M, if the remainder is 0, then (0 + m-1)/m = 0;
If the remainder is greater than or equal to 1, set to X (1 <= x < m) m <= (x + m-1) < m (x + m-1)/2 = 1;
That just satisfies the demand. So the expression that conforms to test instructions becomes:
return (N/m + ((n-n/m*m) + (m-1))/m);
Conclusion: After the above analysis, this problem mainly needs to solve two aspects:
1) How to obtain the remainder without taking the rest operator: (n-[n/m] * m)
2) When the value of the remainder does not know, how to get the need to add 0 if you do not have to judge the statement, or add 1. : Value = ((n-n/m*m) + (m-1))/M
OK, solve the problem, you can sleep soundly, hehe.
Welcome to correct and pointing.
A line of miscellaneous questions to find page pages