C言語 多重ループの場合のコードの書き方
下記のプログラムは、
sum円の所持金があり、n種類の商品の中からcnt個の商品を選びお釣り(min円)を最小にする
というアルゴリズムです(商品は安い順にx[1]円,x[2]円,,,,x[n]円と示されます)
現状では、下記のコードのとおり、回文の中に回文といった構造になっており、cntの値によってループの数やループの条件が変わっていくようになっております。
cntの値は入力値で与えられるため、どのcntの値にも対応可能な式を作りたいのですが、どのようにすればいいのでしょうか?
// cnt=2の場合
int min=10000001;
for(int k=n;sum>=x[k]&&k>=cnt;k--){
for(int j=k-1;sum>=x[k]+x[j]&&j>=cnt-1;j--){
min=min>(sum-x[k]-x[j])?(sum-x[k]-x[j]):min;
}
}
と
// cnt=4の場合
int min=10000001;
for(int k=n;sum>=x[k]&&k>=cnt;k--){
for(int j=k-1;sum>=x[k]+x[j]&&j>=cnt-1;j--){
for(int i=j-1;sum>=x[k]+x[j]+x[i]&&i>=cnt-2;i--){
for(int l=i-1;sum>=x[k]+x[j]+x[i]+x[l]&&l>=cnt-3;l--){
min=min>(sum-x[k]-x[j]-x[i]-x[l])?(sum-x[k]-x[j]-x[i]-x[l]):min;
}
}
}
}
✳︎初心者であるため、適切でない表現が含まれていますがご了承ください