Donuts

Solution 1. Since the problem states that all agreed that "Janet got two," they are either all lying or all telling the truth. They can't all be telling the truth since Jack and Janet disagree about how many doughnuts Jack got. This means they are all lying. Given this, Jack would have had to have gotten exactly three doughnuts. Since Janet did not get two, she would have only gotten one (from the three remaining), which leaves two for Chrissy.
Solution 2. This problem lends itself to a straightforward computer solution using the programming language Prolog. The listing is given below.
% Each person can have from one to six doughnuts.
Canhave(D)  :- member(D,[1,2,3,4,5,6]).

% Helper rules
has(N,N).
Nothas(N,D) :- canhave(N), N\=D.

% In the following, the variable (upper case) with the person's name represents 
% the number of doughnuts the that person had.

% Positive and negative version of statements from Jack
state(jack, Jack, Janet) :- has(Janet,2),    has(Jack,1)).
State(jack, Jack, Janet) :- nothas(Janet,2), nothas(Jack,1).

% Positive and negative version of statements from Janet
state(janet, Jack, Janet) :- has(Janet,2),    has(Jack, 2).
State(janet, Jack, Janet) :- nothas(Janet,2), nothas(Jack,2).

% Positive and negative version of statements from Chrissy
state(chris, Jack, Janet) :- has(Janet,2),    canhave(Jack), Jack>3.
state(chris, Jack, Janet) :- nothas(Janet,2), canhave(Jack), Jack=<3.

solve(Jack, Janet, Chris)  :-
               state(jack, Jack, Janet),
               state(janet, Jack, Janet),
               state(chris, Jack, Janet),
               canhave(Chris),
               6 is Jack+Janet+Chris,!.

Typing

 
?- solve(Jack, Janet, Chris).

Produces: