【发布时间】:2018-10-03 15:43:54
【问题描述】:
我是一个新手,我被 Codewars 的这个问题困住了。问题是;
“给定两个数组 a 和 b,编写一个函数 comp(a, b)(Clojure 中的 compSame(a, b))检查两个数组是否具有“相同”元素,具有相同的多重性。“相同”这里的意思是,b 中的元素是平方中的元素,无论顺序如何。"*
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121、14641、20736、361、25921、361、20736、361]comp(a, b) 返回真,因为在 b 中 121 是 11 的平方,14641 是 121 平方, 20736 144 平方, 361 19 平方, 25921 161 的平方,以此类推。
如果我们将第一个数字更改为其他数字,comp 可能不会返回 true 不再:
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [132、14641、20736、361、25921、361、20736、361]comp(a,b) 返回 false,因为在 b 中 132 不是任意数量 a 的平方。
我认为一个检查所有数组的算法,但我不能使它成为可能。它是 C 语言。我正在 Visual Studio 上编写代码,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
int tempVal1;
int tempVal2;
bool comp(int *a, int *b, size_t sizeArray)
{
if (sizeArray == 0 || sizeArray == 0)
return false;
for (int k = 0; k < sizeArray; k++)
{
for (int i = 0; i < sizeArray; i++)
{
if (a[k] == sqrt(b[i]))
tempVal1 = 1;
else
tempVal1 = 0;
printf("%d", tempVal1);
}
}
for (int k = 0; k < sizeArray; k++)
{
for (int i = 0; i < sizeArray; i++)
{
if (b[k] == (a[i] * a[i]))
tempVal2 = 1;
else
tempVal2 = 0;
printf("%d", tempVal2);
}
}
printf(" tempval1 : %d\n", tempVal1);
printf(" tempval2 : %d\n", tempVal2);
if (tempVal1 * tempVal2)
return true;
return false;
}
int main() {
bool result;
int a[8] = { 121, 144, 19, 161, 19, 144, 19, 11 };
int b[8] = { 121 * 121, 144 * 144, 19 * 19, 161 * 161, 19 * 19, 144 * 144, 362, 11 * 11 };
result = comp(a, b, 8);
printf("%d\n", result);
}
【问题讨论】:
-
在
{ 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 362, 11*11 }中,362 不等于 19^2。 -
是 C 还是 C++?
-
尝试先对两个数组进行排序,这将使您的算法更简单
-
@Jabberwocky 它是 C Jabber
-
@fury 你在
b中的所有元素都是a中的相同元素的平方,对吧?如果是这样,362 应该是 361,因为 19^2 是 361