For a) Remove $1$ from the first row and double the first column, so we get $4,4$ in the first row and $10,3$ in the bottom row. Now, from the first row, we can remove the $4,4$ grains easily. In the $2nd$ row, double the right column and subtract $2$ from that row, so we get $8,4$, now again double the right column to get $8,8$. It can be easily removed now.
For b) Consider any arbitrary position. We can easily remove grains if there is an equal number in a row. Consider different numbers in the $1st$ row, so keep doubling the column in which the smaller number of the first row is placed until the smaller number becomes $\geq$ the difference of the $2$ in the first row. Now, keep removing $1$ grain from each cell in the $1st$ row until one of the numbers becomes half of the other. This is bound to happen as the difference remains constant throughout, so we'll reach a point where $a=b-a$, where $a,b$ are the no. of grains in each cell in the first row. So, after this double the column with the smaller of the $2$ numbers in the first row. So, we can easily remove that row now. Similar algorithm for the $2nd$ row.
For c) Choosing $2$ such squares with minimum no. of grains and following the same algo will be enough. (No idea if this is the best way or not).