フラッグの状態によって引数を変更する必要があるのですが
どのやり方がベストでしょうか?

//A:冗長だけど単純で解りやすいと思う
if ( flag )
{
func(PARAM1, PARAM2, 1, "hoge1", 2, "hoge2", 3, "hoge3");
}
else
{
func(PARAM1, PARAM2, 2, "hoge2", 3, "hoge3", 1, "hoge1");
}

//B:いったん変数に入れてから function call
if ( flag )
{
n[0] = 1; n[1] = 2; n[2] = 3;
str[0] = "hoge1"; str[1] = "hoge2"; str[2] = "hoge3";
}
else
{
n[0] = 2; n[1] = 3; n[2] = 1;
str[0] = "hoge2"; str[1] = "hoge3"; str[2] = "hoge1";
}
func(PARAM1, PARAM2, n[0], str[0], n[1], str[1], n[2], str[2]);