----------------------------------------
// パターンB
for ( i=0; i<100; i++ ) {
 switch (a[i]) {
 case 1234:
  for ( j=0; j<500; j++ ) {
   前処理A;
   共通処理( a[i] );
  }
  break;
 case 5678:
  for ( j=0; j<1000; j++ ) {
   前処理B;
   共通処理( a[i] );
  }
  break;
 default:
  共通処理( a[i] );
 }
}
----------------------------------------
パターンAは、ソースはすっきりしていますが、
繰り返す数を保持するためだけの配列 b が、無駄かつ莫大なメモリを使用しています。
また、「1234」「5678」という直値が二箇所ずつ埋まっているのもいけません。

パターンBは、共通処理の部分が複数箇所存在するため見た目も悪いですし、
ここを変更しようとすると、すべての箇所を書き換えなければなりません。

どうか、良い方法があればご教授ください。
目指しているのは、1に省メモリ、2に高速化です。