运动声明不好

时间:2015-06-20 21:14:44

标签: c algorithm

考虑到问题:

enter image description here

声明有点含糊不清。我真的不明白他们想要什么。 我只需使用常规for loop

即可显示所需的结果
int step = 0
for(int i = 1; i < m + 1; i++)
{
    if(i != p)
    {
        printf("(%d, %d)", step, i);
        step++;
    }
}

这是他们真正想要的吗?我看到他们在谈论线性时间,所以我认为它不是那么容易吗?我应该构建他们正在讨论的向量,然后删除它吗?

2 个答案:

答案 0 :(得分:1)

您应该编写完整的代码。让我简单一点:

  • 它应该删除数组的每个元素。
  • 在循环结束时,您的程序应该打印出步骤和已删除的其中一个数字,格式为(k, q),其中k是您所在的步骤,{{1是你删除的元素之一。
  • 每次删除元素时,都可以按q更改它。
  • 您还需要记住他们告诉您要使用的算法以及&#34;游戏规则&#34; ,例如: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