#c
Вопрос:
У меня действительно странная проблема с for loop. Я должен сделать программу, которая, учитывая сумму трех кубиков, должна найти все возможные комбинации из этих трех кубиков, которые дают эту сумму. Проблема в том, что циклы for отсчитывают превышенный лимит, который у них есть, и я понятия не имею, почему.
for (k1 = 1; k1 <= 6; k1 ) //k1 - die 1
{
for (k2 = 1; k2 <= 6; k2 ) //k2 - die 2
{
for (k3 = 1; k3 <= 6; k3 ) //k3 - die 3
{
if (k1 k2 k3 == z) //z - sum
cout<<k1<<"-"<<k2<<"-"<<k3<<endl;
}
if (k1 k2 k3 == z)
cout<<k1<<"-"<<k2<<"-"<<k3<<endl;
}
if (k1 k2 k3 == z)
cout<<k1<<"-"<<k2<<"-"<<k3<<endl;
}
Если я введу 16 для суммы, это будут результаты, которые я получу:
2-7-7
3-6-7
4-5-7
4-6-6
5-4-7
5-5-6
5-6-5
6-3-7
6-4-6
6-5-5
6-6-4
Это действительные результаты для суммы 16, но у меня не должно быть числа 7 на кубиках, и кубики не должны быть в состоянии добраться до 7 из-за того, как делается for.
Я использую c 17 в Eclipse с Eclipse CDT.
Комментарии:
1. Вы используете
k3
его после завершения цикла.for (k3 = 1; k3 <= 6; k3 )
Итак , когдаk3 == 7
этот цикл закончится. То же самое сk2
.2. Вам нужно всего 1
if
. И если бы вы использовали переменные с областью действия (напримерfor (int k1 = 1; k1 <= 6; k1 )
), компилятор остановил бы вас от совершения этой ошибки.
Ответ №1:
Это происходит потому,что у вас есть переменные k2, k3, которые распределены выше.
Что касается цикла, он работает до тех пор, пока не закончится цикл, когда k3=7. Итак, k3 сохранит его, и после цикла, когда вы его получите, у вас будет 7.
Вы могли бы использовать один из предложенных подходов Сета Фолфнера или Иксисарвинена. Если вы хотите сохранить значения для использования в будущем, используйте код Сета Фолфнера. Если в этом нет необходимости, используйте код Иксисарвинена.
Ответ №2:
Почему бы просто не проверить внутри петель?
for (k1 = 1; k1 <= 6; k1 ) //k1 - die 1
{
for (k2 = 1; k2 <= 6; k2 ) //k2 - die 2
{
for (k3 = 1; k3 <= 6; k3 ) //k3 - die 3
{
if (k1 k2 k3 == z) //z - sum
cout<<k1<<"-"<<k2<<"-"<<k3<<endl;
}
}
}
Ответ №3:
Проблема в том, что переменная k3 не повторяется за пределами последнего цикла for. Вот тут-то и возникает проблема. Для получения желаемого результата проверьте сумму и распечатайте, если она верна; это следует делать только один раз в последнем цикле for.
Пример кода будет выглядеть так :-
#include <iostream>
using namespace std;
int main()
{
int num,i,j,k;
cout<<"enter a number"<<endl;
cin>> num;
cout<<"dice combinations are "<<endl;
for(i=1;i<=6;i )
{
for(j=1;j<=6;j )
{
for(k=1;k<=6;k )
{
if(i j k == num)
{
cout<<i<<"-"<<j<<"-"<<k<<endl;
}
}
}
}
}