c++ - 如何在 3x3 网格中的空白处输入 2 或 4?
问题描述
void putTile(int &n1, int &n2, int &n3, int &n4, int &n5, int &n6, int &n7, int &n8, int &n9)
{
srand(time(0));
int i = (((rand()%10)) < 5 ? 2:4);
if (n1||n2||n3||n4||n5||n6||n7||n8||n9 == 0) {
switch((rand()%9) + 1) {
case 1:
n1 = i;
break;
case 2:
n2 = i;
break;
case 3:
n3 = i;
break;
case 4:
n4 = i;
break;
case 5:
n5 = i;
break;
case 6:
n6 = i;
break;
case 7:
n7 = i;
break;
case 8:
n8 = i;
break;
case 9:
n9 = i;
break;
}
}
}
我试图在空的地方(包含 0 的地方)随机生成 2 或 4,但我的算法在随机地方输入随机生成的数字(2 或 4),即使在已经有数字的地方,因为我使用了 if 语句代码的开头。有关如何更正代码的任何建议?
解决方案
让我们像编译器一样查看您的代码:
void putTile(int &n1, int &n2, int &n3, int &n4, int &n5, int &n6, int &n7, int &n8, int &n9)
{
srand(time(0));
int i = (((rand()%10)) < 5 ? 2:4);
// below compiler sees "number or number or number or (number is zero)",
// compiler does not see "if either of the numbers is zero",
// if asked to do a logical "OR" of two numbers, then it will do the logical
// "number is non-zero OR other number is non-zero",
// i.e. it sees this, probably extremely probable condition:
if ( (n1 != 0)
||(n2 != 0)
||(n3 != 0)
||(n4 != 0)
||(n5 != 0)
||(n6 != 0)
||(n7 != 0)
||(n8 != 0)
||(n9 == 0)
)
{
// program will almost always execute this
switch((rand()%9) + 1) // do a switch on a random number
{
case 1: // if it is 1
n1 = i; // overwrite n1 unconditionally with i, whether it is 0 or not
break;
case 2: // same for 2 ... etc.
n2 = i;
break;
case 3:
n3 = i;
break;
case 4:
n4 = i;
break;
case 5:
n5 = i;
break;
case 6:
n6 = i;
break;
case 7:
n7 = i;
break;
case 8:
n8 = i;
break;
case 9:
n9 = i;
break;
}
}
}
推荐阅读
- flutter - Bloc Listener:访问前一个状态
- android - Android BottomSheetDialogFragment 在查看 setVisibility(View.GONE) 后弹出到 TOP
- python - exchangelib - 附加附件以回复时出错
- python - TypeError:字段“id”需要一个数字,但得到了
- python - 单词边界 \b 不适用于 Python 正则表达式中带点的字符串
- python - max_heapify 遍历堆以获取下一级节点的迭代方式
- python - Python 制作模型 Maxent 分类器
- sql - 使用同一表中现有行的总和插入新行
- excel - 复制的宏表打开原始工作簿
- python - 当我在退出烧瓶应用程序后按退格键时,我仍然可以使用 Flask + Dash 访问受限页面