C连续三个数字的产品

时间:2015-09-18 04:19:36

标签: c algorithm loops

我试图解决这个棘手的问题,但由于某种原因我的代码做错了...我不知道为什么,但我会尽力解释。

  

连续产品:   编写一个读取正整数的程序   从标准输入中验证它是否等于三的乘积   自然和连续的数字。例如,数字120是相等的   对于4x5x6,对于数字90,没有任何三个连续的自然   产品为90的数字。您的程序应生成输出   'S'如果有3个连续的自然数,其产品是   值读取,如果没有则为“N”。

val res = l.map(f _ andThen g _ andThen h _)

这是我的代码:

Input

120

Expected Output

"S"


Input

60

Expected Output

"S"


Input

80

Expected Output

"N"


Input

120

Expected Output

"S"

所以基本上它的作用是我有3个循环将以 #include <stdio.h> int main(){ int int1,i,count=10,j,k,w=0; scanf("%i",&int1); for (i = 1; i <= count; ++i) { for (j = 1; j <= count+1; ++j) { for ( k = 1; k <= count+2; ++k) { if ((i==j+1 && i==k+2) && (i*j*k==int1)){ w=1; } } } } if (w==0) { printf("N"); } else{ printf("S"); } } 形式生成随机数...它会检查我们是否得到了我们想要的东西(三个自然和连续数字的乘积)。这是为了作业。

3 个答案:

答案 0 :(得分:4)

您不需要3个循环。一个简单的方法是:

int test(int num)
{
    for (int i = 1; i < num; i++)
    {
        int product = i * (i + 1) * (i + 2);
        if ( product == num )
            return true;
        else if (product > num)
            break;
    }
    return false;
}

答案 1 :(得分:4)

我修改了你的代码。如果问题仍然存在,请告诉我。所做的改变正如WDS所说。

#include <stdio.h>
int main(){
int int1,i,count=10,j,k,w=0,comp;
scanf("%i",&int1);
for (i = 1; i <= count; ++i)
{
    comp = i*(i+1)*(i+2);
    if(comp==int1)
    {
        w = 1;
    }
}
if (w==0)
{
    printf("N");
}
else
{
    printf("S");
}
return 0;
}

答案 2 :(得分:2)

您可能希望在此问题上添加算法标记。也就是说,我的方法是考虑3个连续数字的乘积是什么。您可以将其写为x *(x + 1)*(x + 2)。但还有更好的方法。

将其写为(x-1)* x *(x + 1)。然后乘法和简化。结果是x ^ 3-x。

现在对于任何给定的数字,从x = 2开始x上的单个循环(因为如果x = 1,则x-1 = 0,这将永远不是解决方案)并且每个循环递增1。检查每个循环是否与输入编号匹配。如果匹配,则返回true。如果不匹配且超过输入数字则返回false。如果它不匹配且小于输入数字,则再次循环。