Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 三个连续数的乘积_C_Algorithm_Loops - Fatal编程技术网

C 三个连续数的乘积

C 三个连续数的乘积,c,algorithm,loops,C,Algorithm,Loops,我试图解决这个棘手的问题,但由于某种原因,我的代码出错了。。。我不知道为什么,但我会尽力解释 连续产品: 编写一个读取正整数的程序 从标准输入,并验证它是否等于三的乘积 自然数和连续数。例如,数字120相等 对于4x5x6,对于数字90,没有任何三个连续的自然值 乘积为90的数字。您的程序应该作为输出生成 如果有3个连续的自然数,其乘积为 值已读取,如果没有,则为“N” 这是我的代码: #include <stdio.h> int main(){ int int1,i,co

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

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

这是我的代码:

 #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");
    }
}
#包括
int main(){
int int1,i,count=10,j,k,w=0;
scanf(“%i”和&int1);

对于(i=1;i)您可能想在这个问题上添加算法标签。换句话说,我的方法是考虑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。如果不匹配且小于输入编号,则再次循环。

您可能希望在这个问题上添加算法标记。也就是说,我的方法是要考虑3个连续数字的乘积是什么。你可以把它写成x*(x+1)*(x+1)。但是有更好的方法。< /P> 把它写成(x-1)*x*(x+1)。然后乘法和简化。结果是x^3-x


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

您不需要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;
}
int测试(int num)
{
for(int i=1;i数量)
打破
}
返回false;
}

您不需要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;
}
int测试(int num)
{
for(int i=1;i数量)
打破
}
返回false;
}

我修改了您的代码。请告诉我问题是否仍然存在。所做的更改与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;
}
#包括
int main(){
int int1,i,count=10,j,k,w=0,comp;
scanf(“%i”和&int1);

对于(i=1;i我修改了您的代码。请告诉我问题是否仍然存在。所做的更改与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;
}
#包括
int main(){
int int1,i,count=10,j,k,w=0,comp;
scanf(“%i”和&int1);

对于(i=1;i您的过程似乎无效,请尝试查找素数因子,然后检查是否可以使用不同的倍数组合找到连续数。问题是什么?您希望您的程序不会输出什么?它似乎适用于您给出的示例。是的,我知道,这正是我非常困惑的原因…您的p进程似乎无效,请尝试查找素数因子,然后检查是否可以使用不同的倍数组合找到连续数。问题是什么?您希望您的程序不会输出什么?它似乎适用于您给出的示例。是的,我知道,这正是我非常困惑的原因…您声明的方式不是变量只有C++是正确的吗?它可能与C99:KEDIN,我来自C++背景,因此根据需要声明变量。但是严重的是,在C99中,它们是合法的。如果乘法溢出,该代码可能产生不准确的结果,如果<代码> Num < /C>大于最大,则产生<代码> s>代码>输出并符合数据类型。ent在您的情况下,无法找到此代码如何产生不准确的结果。测试产品==num仍然有效,因此识别N为S没有任何更改。循环以for条件(inum)终止。(现在,如果负num是另一种情况,但我假设调用方捕获该条件:)您能否详细说明代码是如何中断的?对于高
num
,产品将溢出。考虑到大多数编译器如何处理溢出,产品将变为负数。然后随着
i
变大,产品将再次变为正数,并可能恰好变为
num
。请尝试使用
num=139154728
,不应重新设置对于代码< > 2058 = <代码>,但它确实(假设32位<代码> int <代码>)。真正的值<代码> 2058×2059×2060 <代码>是代码> 8729089320 < /代码>,不适合于32位整数。您声明变量的方式仅对C++是正确的吗?它可能与C99:KEDIN,我来自C++背景,因此根据需要声明变量。但是严重的是,在C99中,它们是合法的。如果乘法溢出,该代码可能产生不准确的结果,如果<代码> Num < /C>大于最大,则产生<代码> s>代码>输出并符合数据类型。ent在您的情况下,无法找到此代码如何产生不准确的结果。测试产品==num仍然有效,因此识别N为S没有任何更改。循环终止于for条件(inum)。(现在,如果负num是另一种情况,但我假设