我试图解决这个棘手的问题,但由于某种原因我的代码做错了...我不知道为什么,但我会尽力解释。
连续产品: 编写一个读取正整数的程序 从标准输入中验证它是否等于三的乘积 自然和连续的数字。例如,数字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");
}
}
形式生成随机数...它会检查我们是否得到了我们想要的东西(三个自然和连续数字的乘积)。这是为了作业。
答案 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。如果它不匹配且小于输入数字,则再次循环。