Faf du Plessis hit his third century in four games as South Africa beat Zimbabwe by 63 runs on Thursday to book a date with Australia in the triangular series final.
Du Plessis' 121 carried the Proteas to 271 for six after they were put in to bat in Harare, before JP Duminy picked up three wickets as Zimbabwe were bowled out for 208.
Zimbabwe had to chase down their target in 25.2 overs if they were going to gain a bonus point and improve their net run rate sufficiently to knock South Africa out, but didn't even come close to winning with Brendan Taylor's 79 the only score of note.
Instead South Africa ended up winning with a bonus point to top the standings, and they will now meet Australia at the same venue in Saturday's final.
Du Plessis paced his innings superbly on another turning pitch, bringing up his half-century in 87 balls as the Proteas recovered from the early loss of their openers, before gradually increasing his scoring rate until a climax saw him hit three sixes in four balls after he had reached three figures.
The No. 3 batsman only scored his maiden one-day hundred last Wednesday against Australia, but followed it up with 126 against the same opposition in a losing cause on Tuesday before adding a third century on Thursday.
"It's certainly the best form he's shown at international level, but I've always known that he's capable of doing that so it's great to see him coming through at a crucial time leading up to a big World Cup," South Africa captain AB de Villiers said.
"It's great to have our No. 3 spot cemented down now by a guy in great form and with a great cricket brain."
Although the game began promisingly for Zimbabwe after they won the toss and inserted South Africa before reducing them to 26 for two, Du Plessis added 70 for the third wicket with Rilee Rossouw.
While Rossouw was bowled for 36 by left-arm spinner Sean Williams and De Villiers was run out in bizarre circumstances when John Nyumbu dropped a return catch from Du Plessis onto the stumps at the non-striker's end, a savvy 103-run stand between Du Plessis and JP Duminy put the Proteas back on track.
As Zimbabwe's spinners whirled away, the pair manoeuvred a succession of ones and twos to set the innings up for a big push at the end.
Even as both batsmen departed attempting big shots, with Duminy out for 51, the Proteas added 61 in the last five overs to leave Zimbabwe with a huge task that proved well beyond them.
Although all but one of the top seven reached double figures, the hosts were unable to form any meaningful partnerships as a series of batsmen got in and then got out.
While Taylor returned to form with his first half-century in seven matches, he found precious little support and was eventually bowled by Duminy, who finished with figures of 3 for 35.