Well, in a brute-force approach you could first list all subsets of {a,b,c,d} with zero, one or two elements and then you may view them as satisfying assignment to construct a DNF.
!a&!b&!c&!d |
!a&!b&!c& d |
!a&!b& c&!d |
!a&!b& c& d |
!a& b& c&!d |
!a& b&!c&!d |
!a& b&!c& d |
a&!b&!c&!d |
a&!b&!c& d |
a&!b& c&!d |
a& b&!c&!d
Better working recursively using a Shannon expansion
a & atmostOne{b,c,d} | !a&atmostTwo{b,c,d}
atmostOne{b,c,d} = b&!c&!d | !b&c&!d | !b&!c
atmostTwo{b,c,d}
= b&atmostOne{c,d} | !b&atmostTwo{c,d}
= b&c&!d | b&!c | !b
Hence,
a&(b&!c&!d | !b&c&!d | !b&!c) |
!a&(b&c&!d | b&!c | !b)
But there are many ways you can approach this.
Another alternative is to consider the negation of the formula which states that either four or three of the variables are true this can be easily written as
a & b& c&!d |
a & b&!c& d |
a &!b& c& d |
!a & b& c& d |
a & b& c& d