对于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,因为是如何为。
我在中使用c++ 17。
发布于 2021-11-10 18:41:28
之所以会发生这种情况,是因为您的k2、k3变量分配得更高。
至于循环,直到它在k3=7时结束循环为止。所以,k3会保存它,当你得到它时,k3会保存它,然后循环,得到7。
您可以使用Seth Faulfner或Yksisarvinen提出的方法之一。如果您想保存值以供将来使用,请使用Seth Faulfner的代码。如果没有必要使用Yksisarvinen的代码。
发布于 2021-11-10 18:30:40
为什么不直接检查循环内部呢?
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;
}
}
}发布于 2021-11-10 19:00:26
问题是变量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;
}
}
}
}
}https://stackoverflow.com/questions/69918360
复制相似问题