Check if element in array are square of each other
1 回表示 (過去 30 日間)
古いコメントを表示
Hello,
I have a problem where I have to find possible squares in an array. For example [7 5 49] or [49 5 7] is true since 7 squared is 49, but [11 13 25] should return false.
Is there a way to do it better than a nested loop?
Thank you!
function y = isItSquared(x)
y = false;
for i = 1:length(x)
for j = i+1:length(x)
if x(i)^2 == x(j) || x(i) == x(j)^2
y = true
break
end
end
end
0 件のコメント
採用された回答
Mark Sherstan
2019 年 3 月 22 日
You can get rid of one of the for loops:
function y = isItSquared(x)
y = false;
xSquare = x.^2;
for ii = 1:length(x)
if (sum(x(ii) == xSquare) ~= 0)
y = true;
return
end
end
4 件のコメント
その他の回答 (4 件)
madhan ravi
2019 年 3 月 22 日
nnz(V.^2==V.')>=1 % where V your vector, result 0 means false, 1 means true
5 件のコメント
madhan ravi
2019 年 3 月 22 日
編集済み: madhan ravi
2019 年 3 月 22 日
https://in.mathworks.com/help/matlab/ref/nnz.html - nnz() gives you the total number of non-zero elements.
>= means if you have one or more then set it to true.
So what happens is each element of the vector is compared with the square of each element , so if atleast a single match is found then the answer returned is 1 meaning true.
Steven Lord
2019 年 3 月 22 日
I would probably do this using some subset of the ismember, any, sum, all, and/or isequal functions. Read through the help text and see if you can think of a way to use some of those functions to accomplish that task.
0 件のコメント
Agam Sharma
2022 年 6 月 8 日
function b = isItSquared(a)
b=false;
c=a.^2; %creating another array containing respective squares in 'a'
for i=1:length(c)
if(ismember(c(i),a)) %check if square is present in a itself
b=true;
end
end
end
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!