我已经很长时间没用过C.
我有一个2d数组,其中每个元素是1或0.我想知道每一行是否有1。我这样做了:
int findPerimeter(int schemaArray[50][50]) {
我使用它错了吗?
schemaArray是我的参数列表中的参数:
var ss = require("sdk/simple-storage");
var storage = ss.storage;
/* using 'storage' doesn't matter as long as you don't have identifyers collision */
storage[naming()] = new entryConstructor();
// and you still can refer to storage using ss.storage
答案 0 :(得分:2)
您必须遍历该行的所有列以检查是否存在1
。
示例代码:
for (int row = xa; row < 50; row++ ) {
int bIsOne = 0;
for (int i = 0;i < col_size && !bIsOne; i++ ) {
bIsOne = bIsOne | schemaArray[row][i];
}
if( bIsOne )
printf("1 found in row %d\n",row );
}
除非为schemaArray
构造位图,否则无法使用按位运算符完成此操作。在这种情况下,您可以一次检查整行。
这主要是一种矫枉过正。只有当您的代码对性能至关重要时才这样做。
预处理步骤:为schemaArray构建位图数组
long long bitMapSchemaArray[ROW_SIZE];
for (int i = 0; i < row_count; i++) {
long long columnBitMap = 0;
for (int j = 0; j < col_count; j++ ) {
columnBitMap <<= 1; // Multiplies by 2
columnBitMap = columnBitMap | schemaArray[i][j]; // Add a 1 if schemaArray[i][j]=1 else 0
}
bitMapSchemaArray[i] = columnBitMap;
}
在您的函数中,您可以将位图用作:
for (int i = 0; i < row_count; i++) {
if( bitMapSchemaArray[i] )
printf("There is a 1 in %d row\n", i+1);
}
但是,假设我们使用64位整数数组,最多只能在2-D
数组中有64列。当然,您也可以使用ceil(column_count)/64
64位整数将其推断为包含64列以上。在这种情况下,按位OR每列检查累积结果是否仍为非零。
答案 1 :(得分:2)
简单地迭代整行并找出
for (row = 0; row < 50; row++) {
for (col= 0; row < 50; col++) {
if (schemaArray[row][col] == 1){
printf("1 found in row %d\n",row );
break;
}
}
}