MATLAB Cody

是MathWorks官方的通關形式題庫,問題豐富,涉及面廣,學習matlab不同階段的人都可以在其中找到適合自己的題庫。其中,Cody Challenge是面向新手的題庫,由易到難,幫助大家掌握基礎,並感受matlab矩陣化運算的特點。

Cody Challenge-MathWorks官網面向新手的通關類題庫及解答(一)

學習matlab兩個月,感覺自己並沒有用到太多matlab矩陣化運算,偶然發現這個題庫,感覺還不錯,在此記錄分享,若有人看且能指出某題有更好的解法,不勝感激。

以下是部分題目:

1。

給定變數x作為你的輸入,將它乘以2,並將結果代入y,例如:輸入x

例子:

Input x = 2

Output y is 4

Input x = 17

Output y is 34

解決:

function y = times2(x)

y = 2*x;

end

2。

在MATLAB中,透過將元素括在方括號中來建立一個向量:

x = [1 2 3 4]

逗號是可選的,因此您也可以輸入:

x = [1, 2, 3, 4]

Create the vector

x = [1 2 3 4 5 6 7 8 9 10]

解決:

function x = oneToTen

x = 1:10;

end

3。

找出輸入向量x的所有數字的總和。

例子:

Input x = [1 2 3 5]

Output y is 11

Input x = [42 -1]

Output y is 41

解決:

function y = vecsum(x)

y = sum(x);

end

4。

給定一個整數n,建立一個由交替的1和0組成的n×n矩陣,如下所示。a(1,1)應該是1。

例子:

Input n = 5

Output a is [1 0 1 0 1

0 1 0 1 0

1 0 1 0 1

0 1 0 1 0

1 0 1 0 1]

解決:

function a = checkerboard(n)

for m = 1: n

if mod(m,2)

a(m,[1:2:n]) = 1;

else

a(m,[2:2:n]) = 1;

end

end

end

5。

三角形數是連續整數的和。6是一個三角形,因為

6 = 1 + 2 + 3

因此6 =triangle(3)給定n,返回t, n的三角數。

例子:

Input n = 4

Output t is 10

解決:

function t = triangle(n)

t = sum(1:n)

end

6。

編寫一個函式,該函式返回傳入的向量的所有其他元素。即,它返回從第一個開始的所有奇數元素。

例子:

Input x = [1 3 2 4 3 5]

Output y is [1 2 3]

Input x = [5 9 3 2 2 0 -1]

Output y is [5 3 2 -1]

解決:

function y = everyOther(x)

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

end

8。

給定a和b,返回c中a+b的和。

解決:

function c = add_two_numbers(a,b)

c = a + b;

end

9。

您有一個矩陣,其中每一行都是一個人,列代表該人所擁有的四分之一,五分之一,一分錢和幾美分的數量(按此順序)。 錢最多的人的行索引是多少?

對於那些不熟悉美國硬幣的人請注意:四分之一= 0。25美元,一角硬幣= 0。10美元,鎳= 0。05美元,一分錢= 0。01美元。

例子:

Input a = [1 0 0 0; 0 1 0 0]

Output b = 1

解決:

function b = most_change(a)

b = [0。5,0。05,0。1,0。01];

b = repmat(b,size(a,1),1); %b矩陣在行重複size(a)次,列重複1次

b = b 。* a;

b = sum(b,2);

b = find(b == max(b) );

end

10。

如果輸入向量的元素單調增加(即每個元素大於前一個元素),則返回true。 否則返回false。

例子:

Input x = [-3 0 7]

Output tf is true

Input x = [2 2]

Output tf is false

解決:

function tf = mono_increase(x)

tf = false;

b = x(2:length(x)) - x(1:length(x)-1);

if isempty(b(b<0))

tf = true;

end

end

12。

給定n,返回f,其中f = fib(n)和f(1)= 1,f(2)= 1,f(3)= 2,。。。

例子:

Input n = 5

Output f is 5

Input n = 7

Output f is 13

解決:

function f = fib(n)

b = zeros(1,n);

b([1,2]) = 1;

for m = 3:n

b(m) = b(m-1)+b(m-2);

end

f = b(n);

end

13。

刪除給定短語中的所有子音。

例子:

Input s1 = ‘Jack and Jill went up the hill’;

Output s2 is ‘a a i e u e i’;

解決:

function s2 = refcn(s1)

s3 = ‘BbCcDdFfGgHhJjKkLlMmNnPpQqRrSsTtVvWwXxYyZz’;

s2 = [];

for m = 1:length(s1)

if ismember(s1(m),s3) == 0

s2 = [s2,s1(m)] ;

end

end

end

14。

矩陣中始終至少有一個素數。 %我看例子理解為是所有素數的均值

例子:

Input in = [ 8 3

5 9 ]

Output out is 4 or (3+5)/2

解決:

function out = meanOfPrimes(in)

a = isprime(in);%是素數返回1

a = in(a);

out = sum(a)/length(a);

end

15。

給定一個字串,例如

s = ‘011110010000000100010111’

查詢連續1的最長字串的長度。 在此示例中,答案將是4。

例子:

Input x = ‘110100111’

Output y is 3

解決:

function y = lengthOnes(x)

n = 1;

c = zeros(1,10);

id = 1;

while n < length(x)+1

if x(n) == ‘0’ %遇到1則進入計數迴圈

n = n+1;

else

m = n;

while x(m) == ‘1’

m = m+1;

if m > length(x)

break;

end

end

c(id) = m-n;

n = n+c(id)+1;

id = id+1;

end

end

y = max(c);

end

16。

編寫一個將數字列表或數字陣列作為輸入並返回與零相鄰的最大數字的函式。

例子:

Input x = [1 5 3 0 2 7 0 8 9 1 0]

Output y is 8

解決:

function y = nearZero(x)

a = find(x == 0);

b = zeros(1,2*length(a));

for m = 1:length(a)

if a(m) == 1 %0出現在最左邊

b(1) = x(2);

elseif a(m) == length(x) %0出現在最右邊

b(end) = x(end-1);

else

b(2*m) = x(a(m)-1);

b(2*m-1) = x(a(m)+1);

end

end

if b(b<0) %負數最大的情況

y = max(b(b<0));

else

y = max(b);

end

end

17。

給定輸入向量x,找到x小於0或大於10的所有元素,並將其替換為NaN。

例子:

x = [ 5 17 -20 99 3。4 2 8 -6 ];

y_correct = [ 5 NaN NaN NaN 3。4 2 8 NaN ];

解決:

function y = cleanUp(x)

x(x<0) = nan;

x(x>10) = nan;

y = x;

end

18。

給定n(總是奇數),返回輸出a,其中心點周圍具有從1到(n + 1)/ 2的同心環。

例子:

Input n = 3

Output a is [ 2 2 2

2 1 2

2 2 2 ]

Input n = 5

Output a is [ 3 3 3 3 3

3 2 2 2 3

3 2 1 2 3

3 2 2 2 3

3 3 3 3 3 ]

解決:

a = zeros(n);

b = fix(n/2)+1; %fix()向零取整

a(b,b) = 1;

for m = 1:b-1 %fix()向零取整

a([b-m,b+m],:) = m+1;

a(:,[b-m,b+m]) = m+1;

end

19。

翻轉矩陣A的最外面的列,以使第一列成為最後一列,最後一列成為第一列。 所有其他列應保持不變。 返回結果到矩陣B。

如果輸入只有一列,則輸出應與輸入相同。

例:

Input A = [ 12 4 7

5 1 4 ];

Output B is [ 7 4 12

4 1 5 ];

解決:

function B = swap_ends(A)

if size(A,2) == 1

B = A;

else

A(:,[1,end]) = A(:,[end,1]);

B = A;

end

20。

給定n,找到組成2 ^ n的數字之和。 %2^n各位數之和

例子:

Input n = 7

Output b = 11

%since 2^7 = 128, and 1 + 2 + 8 = 11。。

解決:

function b = sumDigits(n)

a = 2^n;

x = 0;

while fix(a/10^x)

x = x+1;

end

a = 2^n;

b = 0;

for m = x:-1:1

b = b+mod(a,10);

a = fix(a/10);

end

end