好的,所以我真的觉得我在想这个,但我已经连续48小时编程,我的思绪已经消失了。背景信息:使用Visual Studio 2010,使用C ++创建控制台应用程序。我遇到了一些逻辑问题,并陷入了以下困境:
我有一个2维8 x 8阵列,矩阵[8] [8]。该数组包含0,1和2。现在,当程序执行时,数组将1或2替换为0。因此,当它运行时,我想检查数组是否已删除所有的1或2。因此,如果只有0和1,我想传达一条消息,说“你的数组不再包含2个”,反之亦然,如果只有0和2的话。
以下是我正在考虑使用的一些代码:
for(row = 0; row < 8; row++)
{
for (col = 0; col < 8; col++)
{
if(matrix[row][col] != 1){
cout<<"message"<<endl; }
else if(matrix[row][col] != 2){
cout<<"message"<<endl; }
}
}
现在我的问题是,如果数组包含[0,1,2,0],它将运行并检查第一个元素,它不会包含1或2.有关我能做什么的一些想法好吗?
答案 0 :(得分:1)
你不能在循环内决定。您只能在完成整个矩阵后知道结果:
bool hasOnes = false;
bool hasTwos = false;
for(row = 0; row < 8; row++)
{
for (col = 0; col < 8; col++)
{
if(matrix[row][col] == 1) {
hasOnes = true;
} else if(matrix[row][col] == 2){
hasTwos = true;
}
}
if (hasOnes && !hasTwos)
cout << "You have removed twos" << endl;
if (hasTwos && !hasOnes)
cout << "You have removed ones" << endl;
答案 1 :(得分:0)
我建议你迭代矩阵并计算所有这些元素:
int counts[3];
for(i = 0; i < 3; i++)
{
counts[i] = 0;
}
for(row = 0; row < 8; row++)
{
for (col = 0; col < 8; col++)
{
counts[matrix[row][col]]++;
}
}
完成此操作后,您只需检查counts[1]
即可查看矩阵中的数量。此外,如果您迭代地替换值,则可以避免在每次迭代后重新检查完整矩阵。您可以在更改矩阵时更改计数。
答案 2 :(得分:0)
假设你只在每个数组元素中都有0-2: int vals = 0; for(int row = 0; row&lt; 8; row ++) for(int col = 0; col&lt; 8; col ++) { vals | = matrix [row] [col]; if(vals == 3) 打破; } if(vals&amp; 1)cout&lt;&lt; “Matrix包含1个”&lt;&lt; ENDL; if(vals&amp; 2)cout&lt;&lt; “Matrix包含2个”&lt;&lt; ENDL;
答案 3 :(得分:0)
int count[3] = {0,0,0};
for (int i = 0; i < 64; i++) count[*(matrix + i)]++;
if (count[0] + count[1] == 64) cout<<"No 2s exist"<<endl;
if (count[0] + count[2] == 64) cout<<"No 1s exist"<<endl;
修改强>
这可能会稍快一点
int count[3] = {0,0,0};
for (int i = 0; i < 64; i++)
if (!count[1] && !count[2]) count[*(matrix + i)]++;
else break;
if (count[0] + count[1] == 64) cout<<"No 2s exist"<<endl;
if (count[0] + count[2] == 64) cout<<"No 1s exist"<<endl;