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;
}
}
}
}
✳︎初心者であるため、適切でない表現が含まれていますがご了承ください