【问题标题】:how to stop if loop once array has a number如果循环一旦数组有一个数字,如何停止
【发布时间】:2018-04-18 07:10:53
【问题描述】:

我需要创建一个程序,用户将在其中输入多个整数,程序将输出具有比用户输入的下一个更大数字的斐波那契数列。 斐波那契数列如下:

0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765

例子:

用户输入:[1, 9, 22] 输出应该是:2, 13, 34

如果 if 循环已经获得一个值,我似乎无法停止它,因为输出将始终显示 4181、4181、4181。 我的代码如下:

#include <stdio.h>
#include <conio.h>

void main()
{
    int i, n, a[100];
    int inputarray[3], j;
    int outputarray[3];

    a[0] = 0;
    a[1] = 1;
    for (i = 2; i < 20; i++) {
        a[i] = a[i-1] + a[i-2];
    }

    for (i = 0; i < 20; i++) {
        printf("%5d",a[i]);
    }

    for (j = 0; j < 3; j++) {
        printf ("\nEnter numbers of input array:");
        scanf ("%d", &inputarray[j]);
    }

    for (i = 0; i < 3; i++) {
        for (j = 0; j < 20; j++) {
            if (a[j] > inputarray[i])
                outputarray[i] = a[j];
        }
    }

    for (i = 0; i < 3; i++) {
        printf("%5d", outputarray[i]);
    }
    getch();
}

【问题讨论】:

  • 不知道你为什么说if循环,究竟是什么?
  • 什么是“if循环”!?
  • 另外,您的代码使用了一个古老的 main() 签名,它不再被接受,请将其更改为 int main(void)
  • 你的代码风格也很不一致,所以看起来你要么是从其他地方复制粘贴了部分代码,要么是由多个程序员编写的。

标签: c arrays fibonacci


【解决方案1】:

添加break 语句,因为一旦找到所需的值,您就不必继续循环j

for (i=0; i<3; i++)
{
  for (j=0; j<20; j++)
  { 
    if(a[j] > inputarray[i])
    {
        outputarray[i] = a[j]; 
        break;
    }
  } 
} 

【讨论】:

  • 他必须比较所有斐波那契数,所以需要内循环
  • 考虑到 OP 代码的结构,这似乎是一种合理的方法。
  • 好的,这样更好。但是现在你只写了 5 行代码,而且你在选择样式时出现了不一致,缩进很糟糕!
  • @Iharob 至少尝试在否决之前查看逻辑,我只更正了部分代码
【解决方案2】:

如果您不使用for 循环,我会容易得多(因为您不想迭代给定数量的值)。如果您的循环取决于某个条件,请使用 do-while/while 循环。

for (i = 0; i < 3; i++) {
    while (a[j] <= inputarray[i])
    {
        j++;
    }
    outputarray[i] = a[j];
}

【讨论】:

    猜你喜欢
    • 2016-02-25
    • 2020-11-04
    • 2021-07-26
    • 2022-01-12
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多