使用MATLAB实现的小算法练习1
作者:互联网
题目1:
1.给定N和A,N是一个整数,A是一个向量,例如N=3,A=[4 5 6 7],将A中的每一个元素重复N次,然后形成一个向量:
示例:
B=
4 4 4 5 5 5 6 6 6 7 7 7
代码:
N=3;A=[4 5 6 7]
B=A(ones(1,N),:); %ones(1,N):生成一行N列的全为1 的向量
B(:)' % A([1 1],:)是将A的行向量重复两遍
结果:
题目2:
2.假设x是一个向量,例如x = [4 4 4 5 6 6 7 7 8 8 8 8],现在想要得到如下向量
l = [2 3 1 2 4]; %每个元素的重复的个数
v = [4 5 6 7 8]; %重复元素的值
代码:
x = [4 4 4 5 6 6 7 7 8 8 8 8]
i = [find(x(1:end-1) ~= x(2:end)) length(x)]
l = diff([0 i]) %求差分:后减前
v = x(i)
%解释:
x(1:end-1) %取x中的去掉最后一个的所有
思路:差分之后,等于0的说明相同,不等于0说明不同。
结果:
题目3
例如:
l = [2 3 1 2 4];
v = [4 5 6 7 8];
求x
代码:
l = [2 3 1 2 4];
v = [4 5 6 7 8];
i= cumsum([1 l]) %累计求和
j = zeros(1,i(end)-1)
j(i(1:end-1)) = 1
x = v(cumsum(j))
结果:
题目4
求建立以下table数组
table N date cross oddnum evenum
行编号
2017年每天的日期,datetime格式
日期为单,“单号通行”,日期为双,“双号同行”。周末“单双同行”
当前日期单号车一共通行多少天
当前日期双号车一共通行多少天
%代码:
clc;
clear;
NDays = yeardays(2021);
N = [1:NDays]'; %NDays = yeardays(2021)
date = datetime(2021,1,1)+N-1;%生成这一年的日期数组
cross = repmat('单号通行',NDays,1);
a = logical(mod(date.Day,2)); %日期是否为单,mod()求余
cross(~a,:) = repmat('双号通行',sum(~a),1);%~a取反
tf = isweekend(date);
cross(tf,:) = repmat('单双通行',sum(tf),1);
idoddnum = all(cross == '单号通行',2 )|all(cross == '单双通行',2);
idevenum = all(cross == '双号通行',2 )|all(cross == '单双通行',2);
Noddnum = cumsum(idoddnum);
Nevenum = cumsum(idevenum);
CrossDate = table(N,date,cross,Noddnum,Nevenum)
结果:
标签:通行,end,练习,cross,日期,算法,MATLAB,date,cumsum 来源: https://blog.csdn.net/y_bra_ke/article/details/120223092