【问题标题】:A tough loop in a contest比赛中的艰难循环
【发布时间】:2013-05-27 12:38:30
【问题描述】:

今天我在编码比赛中遇到了一个令人恼火的问题。我在第一轮中表现出色,但在第二轮中,下面的问题让我陷入了陷阱。

Question: Input N = 4
          Output:
                 1
                 0 1
                 1 0 1
                 0 1 0 1

我尝试了很多东西,但每次都失败了。

除了这个愚蠢的错误解决方案之外,我尝试了许多花哨的东西,最后都失败了。 我的 C 知识哪一部分比较薄弱?

如果给你这个问题,你会怎么解决?

【问题讨论】:

  • 您的 while 循环条件中有 N,但您在循环中使用了 i。这对我来说几乎是零意义。
  • 您可能想重新发布您的代码,因为现在您似乎什么都没尝试,而是要求人们为您解决问题。
  • 简单的答案,循环。投票也可以帮助您学习。该练习似乎明确设计用于测试您对 C 语言循环的了解程度。老实说,我认为这并不难弄清楚。
  • 我尝试了大约 100 件事情,但没有一件奏效,我应该重新发布所有这些吗?如果你觉得我什么都没试过,那么我不知道该说什么或如何向你证明这一点
  • 您的问题是:Apart from this stupid wrong solution...什么愚蠢的解决方案?我没有看到发布的解决方案,也没有尝试过。

标签: c loops


【解决方案1】:

对我来说似乎很微不足道:

int main(int argc, char *argv[])
{
    int n = strtol(argv[1], NULL, 10);
    for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                    printf("%d ", i % 2 ? j % 2 : 1 - j % 2);
            }
            printf("\n");
    }

    return 0;
}

【讨论】:

  • 你刚才想出了这个解决方案,我是说在你看到代码之后?
  • 非常感谢,我猜它的实践。现在我回到了 KN King。
【解决方案2】:

你惊慌失措。由于您打印的值取决于行和列,因此请同时使用。并更好地命名您的变量。

void printBinaryTriangle(const unsigned int rows) {
    for(int row = 1; row <= rows; ++row) {
        for (int column = 0; column < row; ++column) {
            printf("%d ", (row + column) % 2);
        }
        putchar('\n');
    }
}

【讨论】:

  • 非常感谢。我真的很感激
  • 我不只是写了一个main 方法,因为您将来可能需要从不同来源获取行数,而不是修复4。这是一个竞赛问题,但您仍然可以考虑未来的用途。当您将编程作为工作的一部分时,您需要记住需求会发生变化。
【解决方案3】:

这为我完成了这项工作。

int i,j,flag;
int num=4;

flag=1;
for(i=0;i<num;i++)
{
    for(j=0;j<i+1;j++)
    {
            printf("%d",(j+flag)%2);
    }
    if(flag)
    {
            flag=0;
    }
    else
    {
            flag=1;
    }
    printf("\n");

 }

【讨论】:

    【解决方案4】:

    这是你想要的吗?

    for(int k = 0; k < N; k++){
        for(int i = 0; i < k+1; i++){
            if(i % 2 == k % 2)
               printf("1 ");
            else
               printf("0 ");
        };
        printf("\n");
    }
    

    【讨论】:

    • 换行符和空格呢?
    • 非常感谢。真的有帮助
    【解决方案5】:
    num = 12
    new_string = ''
    new_list = ''
    while num:
        for i in range(1,num+1):
            strings_of_ones = new_string+ '1' * i
            new_list = list(strings_of_ones)
            for j in range(1,len(new_list),2):
                new_list[j]='0'
            print(' '.join(new_list[::-1]))
            num -= 1
    

    【讨论】:

    • 当问题是关于 c 时,您使用 python(?) 代码回答。另外请提供一些详细信息,而不仅仅是代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多