haschanged matlab,[matlab]mathworks上的cody challenge题解及一些常用函数的总结(1)

UPD: 保研弄得差不多了,开始学习别人优秀代码...然后再总结总结...    2013.9.18

暑假想练一下matlab,就想像练C++一样找一个可以刷题的OJ。

很幸运的是,matlab官网上就有:

http://www.mathworks.com/matlabcentral/cody

花了些时间刷了一下上面的入门题(Problem Groups里面的Cody Challenge),基本上都是模拟题。

下面贴一些自己做过的题目和总结一下比较有用的函数。Problem 1 - Problem 10

Problem 1. Times 2 -START HERE

就像a+b一样简单,这题只要让我们把输入的数乘以2。重点是提交的源代码文件需要是一个函数。

function y = times2(x)

y = x*2;

Problem 2. Make the vector [1 2 3 4 5 6 7 8 9 10]

function x = oneToTen

x = 1:10;

用:或者函数linspace就可以实现。

Problem 3. Find the sum of all the numbers of the input vector

function y = vecsum(x)

y = sum(x);

用函数sum.

Problem 4. Make a checkerboard matrix

弄一个01相间的矩阵。

Gfunction a = checkerboard(n)

a = repmat(eye(2), n, n);

a = a(1:n, 1:n); 完全是为了用repmat写的。

repmat(A, M, N)返回一个M行N列个A组成的矩阵,size为[size(A,1)*M, size(A,2)*N]。

eye(N)返回一个N*N的单位矩阵。

UPD: Leading solution是利用逆希尔伯特矩阵元素的正负性写的,没有太多参考性...

invhilb(n)返回一个n阶的逆希尔伯特矩阵。

Problem 5. Triangle Numbers

function t = triangle(n)

t = n*(n+1)/2;

Problem 6. Secelt every other element of a vector

function y = everyOther(x)

y = x(1:2:length(x));

length(x)返回向量x的长度。

UPD: 直接用end应该是比较好的做法...

function y = everyOther(x)

y = x(1:2:end);

Problem 7. Column Removal

function B = column_removal(A, n)

s = size(A);

B = [A(:,1:(n-1)), A(:,(n+1):s(2))]; 删除某列的新矩阵,就是由原来的1到n-1列和n+1列到size(A, 2)列组成的矩阵。

size(A)返回A各维的长度。对于M*N矩阵,size(A,1) = M, size(A,2) = N。

UPD: 可以直接把第n列变为空...

function A = column_removal(A, n)

A(:,n) = '';

Problem 8. Add two numbers

function c = add_two_numbers(a,b)

c = a + b; a+b来啦。

Problem 9. Who Has the Most Change?

function b = most_change(a)

mxmon = 0; b = [];

sa = size(a);

for k = 1:sa(1)

now = 0.25*a(k,1) + 0.05*a(k,2) + 0.10*a(k,3) + 0.01*a(k,4);

if now > mxmon

mxmon = now;

b = k;

elseif now == mxmon

b = [b k];

end

end

不知道是否有简便写法。

UPD:

Leading solution的做法: 先用矩阵乘法算出每个人的钱数,然后用max()函数统计最大值的下标。

function b = most_change(a)

[~, b] = max(a*[0.25; 0.05; 0.1; 0.01]);

Problem 10. Determine whether a vector is monotonically increasing

function tf = mono_increase(x)

tf = true;

for k = 2:length(x)

if x(k) - x(k - 1) <= 0

tf = false;

end

end

判断一个数列是否严格递增。同上。

UPD: 更简洁的做法。

function ans = mono_increase(x)

all(diff(x) > 0);

end

都是非常简单的题目,纯为练函数。今天先贴到这里。

如果有更为简单的方法,请给我留言,谢谢!

允许转载,转载请注明出处: http://blog.csdn.net/lkjslkjdlk/article/details/10118203

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值