考虑到问题:
声明有点含糊不清。我真的不明白他们想要什么。
我只需使用常规for loop
:
int step = 0
for(int i = 1; i < m + 1; i++)
{
if(i != p)
{
printf("(%d, %d)", step, i);
step++;
}
}
这是他们真正想要的吗?我看到他们在谈论线性时间,所以我认为它不是那么容易吗?我应该构建他们正在讨论的向量,然后删除它吗?
答案 0 :(得分:1)
您应该编写完整的代码。让我简单一点:
(k, q)
,其中k
是您所在的步骤,{{1是你删除的元素之一。q
更改它。X
应该是正面的,并且整数。如果您不理解该算法,只需尝试将该想法写在纸上:
当我放n
时,我应该从数组中删除一个元素。当n = 1
,2个元素时,n = 2
时应删除4个元素,n = 3
删除8个元素等。
正如我们所看到的,它非常简单,因为它就像一个几何级数。
答案 1 :(得分:1)
这样的东西? (使用gcc test.c -lm
编译)
#include <stdio.h>
#include <math.h>
int main(void) {
int i, j;
int n = 4;
int m = (int)pow(2,n);
int p = 5;
for(i = 1; i <= n; i++)
{
for(j = (int)pow(2,i-1); j < ((int)pow(2,i)); j++)
{
if(j == p) {
continue;
}
printf("%d, %d\n", i, j);
// remove vector[j]
if((j == (m-1)) && (m != p)) {
printf("%d, %d\n", i, m);
// remove vector[m]
}
}
}
return 0;
}
运行结果n=3, p=5
:
1, 1
2, 2
2, 3
3, 4
3, 6
3, 7
3, 8
运行结果n=4, p=5
:
1, 1
2, 2
2, 3
3, 4
3, 6
3, 7
4, 8
4, 9
4, 10
4, 11
4, 12
4, 13
4, 14
4, 15
4, 16