M) printf("%d\n", xs*ys); -6ren">
gpt4 book ai didi

c - 找出连续乘以 3 个整数所得的第一个大于 M 的数

转载 作者:太空宇宙 更新时间:2023-11-04 08:03:31 25 4
gpt4 key购买 nike

问题陈述:输入:4 个整数 M、x、y、z 其中 100,000 <= M <= 1,000,000-500 <= x, y, z <= 500 .我们想要不断地乘以这些数字的平方,直到我们得到大于 M 的数字并打印该数字。例如,如果 M = 100,000 且 x = 2、y = 3、z = 4,则

2^2 * 3^2 * 4^2 * 2^2 * 3^2 * 4^2 = 331,776

这是我的尝试:

int M, x, y, z, xs, ys, zs, prod_square;
scanf("%d%d%d%d", &M, &x, &y, &z);
if (x == 1 && y == 1 && z == 1) {
printf("Poor input!\n");
return 0;
}
if (x == 0 || y == 0 || z == 0) {
printf("Poor input!\n");
return 0;
}

xs = x*x; ys = y*y; zs = z*z;

if (xs > M) printf("%d\n", xs);

else if (xs*ys > M) printf("%d\n", xs*ys);

else if (xs*ys*zs > M) printf("%d\n", xs*ys*zs);

else {
prod_square = xs*ys*zs;
double temp = (log(M))/(log(prod_square));
int n = (int)temp;
int result = pow(prod_square, n);

int try1 = result * xs;
int try2 = result * xs * ys;

if (try1 > M) printf("%d\n", try1);
else if (try2 > M) printf("%d\n", try2);
}

这适用于大量输入,但对某些边缘情况给出了错误的答案。很遗憾,我无权访问测试数据。

一个问题可能是溢出,但我的 if 语句应该能解决这个问题。

最佳答案

您应该使用适当的循环进行迭代。以下代码可能有用:

 #include <stdio.h>

int main()
{
int M, x, y, z, prod_square;
scanf("%d%d%d%d", &M, &x, &y, &z);
if (x == 1 && y == 1 && z == 1)
{
printf("Poor input!\n");
return 0;
}
if (x == 0 || y == 0 || z == 0)
{
printf("Poor input!\n");
return 0;
}

//Now code changes
int result=1, indx =0, vals[3];
vals[0] = x*x;
vals[1] = y*y;
vals[2] = z*z;

while(result < M)
{
result *= vals[indx++];
indx %=3;
}
printf("%d\n", result);
return 0;
}

另外,对于给定的输入 M = 100,000x = 2, y = 3, z = 4 那么输出应该是

2^2 * 3^2 * 4^2 * 2^2 * 3^2 * 4^2 = 331,776

关于c - 找出连续乘以 3 个整数所得的第一个大于 M 的数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44341077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com