C 分离素数和复合数的矩阵,然后对它们进行排序
我不知道怎么做。。如果有人帮忙我会很感激的, 在矩阵中,素数先出现,然后是复合数,排序是按列进行的 这里有一个例子 输入:C 分离素数和复合数的矩阵,然后对它们进行排序,c,matrix,C,Matrix,我不知道怎么做。。如果有人帮忙我会很感激的, 在矩阵中,素数先出现,然后是复合数,排序是按列进行的 这里有一个例子 输入: 25 3 7 11 15 32 16 9 19 输出: 3 19 32 7 25 16 11 15 9 这可能与排序无关。只需找到下一个素数并将其插入当前位置: 25 3 7 11 15 32 16 9 19 3 25 7 11 15 32 16 9 19 3 7 25 11 15 32 16 9 19 3 7 11 25 15 32 16 9 19 3
25 3 7
11 15 32
16 9 19
输出:
3 19 32
7 25 16
11 15 9
这可能与排序无关。只需找到下一个素数并将其插入当前位置:
25 3 7 11 15 32 16 9 19
3 25 7 11 15 32 16 9 19
3 7 25 11 15 32 16 9 19
3 7 11 25 15 32 16 9 19
3 7 11 19 25 15 32 16 9
3 19 32
7 25 16
11 15 9
我们将矩阵按行转换为行,然后按列还原矩阵。无论如何,这个例子是模糊的。请提供您试图解决的问题。不管这个例子如何,我都不理解这个问题。输出与输入的关系如何?请重新表述这个问题。所以你想重新组织矩阵,让素数从左到右按顺序排列,其余的在。。。随机序列?@Codor输入是一个带有一些随机数的规则矩阵3x3,输出是按列排序的,素数排在第一位,如你所见,然后是复合数。输出刚刚排序。这是一个例子,它不是一个真正的矩阵,是吗?这是一个三列打印的线性阵列。顺便说一句,第2列中的25和15不是素数,也没有排序,所以也许你应该使用另一种解释方法。Thaks Alt Pixy!看起来你是这一页上最棒的家伙;由于素数确定比较困难,所以最好对“is prime”属性进行分区,然后对两个子序列进行排序。不过,这是可行的。是的,最好提前处理,因为iPrime很可能被称为同一质数的倍数。
int cmp(const void *a, const void *b){
int x = *(const int *)a;
int y = *(const int *)b;
int bx = isPrime(x);//0 or 1
int by = isPrime(y);
if(bx ^ by)
return by - bx;
else
return x < y ? -1 : x > y;
}
int main(void){
int i, j;
int m[3][3] = {
{ 25, 3, 7},
{ 11, 15, 32},
{ 16, 9, 19}
};
qsort(&m[0][0], sizeof(m)/sizeof(m[0][0]), sizeof(m[0][0]), cmp);
for(i=0;i<2;++i){
for(j=i+1;j<3;++j){
int temp = m[i][j];
m[i][j] = m[j][i];
m[j][i] = temp;
}
}
for(i=0;i<3;++i){
for(j=0;j<3;++j)
printf("%3d ", m[i][j]);
printf("\n");
}
return 0;
}