MATLAB: Creating a row vector where the index of the vector is not equal to its element value

indexingmatrix manipulation

I am working on a problem and i have an idea of how to do most of it but i am not sure how to do its last part. Any help would be appreciated. I am highlighting the part that i am talking about. The statement for the question is as follows:
Write a function called int_col that has one input argument, a positive integer n that is greater than 1, and one output argument v that is a column vector of length n containing all the positive integers smaller than or equal to n, arranged in such a way that no element of the vector equals its own index. In other words, v(k) is not equal to k for any valid index k.*

Best Answer

function v = int_col(n)
v = randperm(n)';
t = v == (1:n)';
if any(t)
ii = [find(~t,1,'first');find(t)];
v(circshift(ii,1)) = v(ii);
end
Related Question