competition
提取12345和67899这两个五位数的每一位数字,并把他们存储到一个2*5的矩阵里。
- 要求矩阵第一行是12345从万位到个位的所有位数字,第二行为67899从个位到万位的所有位数字
1
2
3
4
5
6clc,clear;
a=12345;
b=67899;
a=str2num(num2str(a)')';
b=fliplr(str2num(num2str(b')')');
[a;b]
- 要求矩阵第一行是12345从万位到个位的所有位数字,第二行为67899从个位到万位的所有位数字
以pi/100为间隔,比较函数sin(2x+3)和cos(3x-1)在0到2π的函数值大小,只画出函数值相对较大的那一部分图像。
1
2
3
4
5
6clc;clear;
close all;
x=0:pi/100:2*pi;
y1=sin(2*x+3);
y2=cos(3*x-1);
plot(x,max(y1,y2));有如下数列:1 3 59 8 74 2 1 3 46 8 7 4 5 6 9 8 5 4 22 25 52 32 64 62 13 1 61 31 31 32 15 4 54 32 24 23 24 15 21 10 30 45 56 14 24 34 13 21 24 23 35 26 15 14 12 13 142 412 43 16 23 4 55 25 21 24 34 12 34 12 43 12 43 14 23 14 12 23 14 21 23 74 14 ;
- 求出数列中每个数出现的次数.
- 并按原序列先后顺序输出(其中相同的数字只保留第一次出现的)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20clc,clear;
a=[1 3 59 8 74 2 1 3 46 8 ...
7 4 5 6 9 8 5 4 ...
22 25 52 32 64 62 13 ...
1 61 31 31 32 15 4 54 32 ...
24 23 24 15 21 10 30 45 56 ...
14 24 34 13 21 24 23 35 26 ...
15 14 12 13 142 412 43 16 23 ...
4 55 25 21 24 34 12 34 12 ...
43 12 43 14 23 14 12 ...
23 14 21 23 74 14];
A=unique(a,'stable')
for i=1:length(A)
[m,n]=find(a==A(i));
if length(m)>=2
%用的好,因为find函数放回的是向量(若向量长度大于2,那么说明该数的横坐标有多个,所以出现了多次)
disp(strcat(num2str(A(i)),'重复',num2str(length(m)),...
'次','位置为:',mat2str([m n])))
end
end
随机生成四组坐标,判断第四个点是否在前三个点构成的三角形内(不包括线上),并画出图像,计算精度为5位有效数字。
- (海伦公式:假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:..而公式里的p为周长的一半)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18clc,clear;
a=rand(4,2);
d=squareform(pdist(a));
f=@(a,b,c)sqrt((a+b+c)/2*((a+b+c)/2-a)*((a+b+c)/2-b)*((a+b+c)/2-c));
s1=f(d(1,2),d(1,3),d(2,3));
s2=f(d(1,2),d(1,4),d(2,4))+f(d(1,3),d(1,4),d(3,4))+f(d(3,2),d(3,4),d(2,4));
if vpa(s1,5)==vpa(s2,5)
fprintf('第四个点在前三个点组成的三角形内')
else
fprintf('第四个点不在前三个点组成的三角形内')
end
x=a(:,1)';y=a(:,2)';
x1=[x(1:3) x(1)];y1=[y(1:3) y(1)];
plot(x1,y1,'b-')%用plot画封闭曲线需要在最后添上第一个点的坐标
text(x+0.01,y+0.01,{'1' '2' '3' '4'})
hold on
plot(x,y,'ro')
s1-s2
- (海伦公式:假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:..而公式里的p为周长的一半)
这题跟算法博弈不一样,matlab。。。。
CTGUMCM是一个大佬云集的地方。已知矩阵a如图4所示,其中1表示大佬,0表示小白。
- (1)在这里大佬小白各有多少位呢?试分别统计,并将大佬们的位置存储在矩阵z中。
- (2)大佬们在这里喜欢抱团。我们称位置(x,y)与其上下左右四个位置(x,y+1),(x,y-1), (x+1,y),(x-1,y)是相邻的。如果矩阵中有若干个1是相邻的(不必两两相邻),那么称这些1构成了一个“大佬集”,试求矩阵a中“大佬集”的个数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50clc,clear;
a = [0 1 1 1 0 0 1
0 0 1 0 0 0 0
0 0 0 0 1 0 0
0 0 0 1 1 1 0
1 1 1 0 1 0 0
1 1 1 1 0 0 0];
[x,y] = find(a == 1);
a1 = length(x);
z = [x y];
[x1,y1] = find(a == 0);
b1 = length(x1);
fprintf('大佬有%d位\n',a1);
fprintf('小白有%d位\n',b1);
fprintf('大佬们的位置');
disp(z);
%%*******第二问********%%
clc,clear;
global a z
z=0;
%a=[0 0 0 0 0;0 1 1 0 0;0 1 0 1 0;0 0 1 1 0;0 0 0 0 0];
a=[0 0 0 0 0 0 0 0 0;0 0 1 1 1 0 0 1 0;0 0 0 1 0 0 0 0 0;0 0 0 0 0 1 0 0 0;0 0 0 0 1 1 1 0 0;0 1 1 1 0 1 0 0 0;0 1 1 1 1 0 0 0 0;0 0 0 0 0 0 0 0 0;];
[ax,ay]=size(a);
for i0=1:ax
for j0=1:ay
bfs(i0,j0)
end
end
fprintf('矩阵a中共有%d个大佬集\n',z)
function bfs(x0,y0)
global a z
x=x0;y=y0;k=0;
x1=[0 0 -1 1];y1=[1 -1 0 0];
if a(x0,y0)==1
while length(x)~=0
k=k+1;
for i=1:4
newx=x(1)+x1(i);newy=y(1)+y1(i);
if a(newx,newy)==1
x=[x,newx];y=[y,newy];
end
end
a(x(1),y(1))=0;
x(1)=[];y(1)=[];
end
if k>1
z=z+1;
end
end
end
在青青草原旁边的小树林里,有两头爱吃蜂蜜的小熊熊。熊大做了一个5*5的VIP单层蜂箱,熊二找到了5只小蜜蜂5只大蜜蜂,它们都表示愿意住在里面,但提出了要求:每只蜜蜂独占一个小房间,且相同大小的蜜蜂不能在同一行、同一列、同一对角线上。聪明的你能帮助小熊熊们设计出10只蜜蜂的居住方案吗
- (1)请编程输出一种满足所有条件的方案
- (2)请编程输出所有方案,并统计共有多少方案。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48%%*******B卷第五题********%%
clc,clear;
n=5;
z=0;
zzz=[];
for a1=1:5
for a2=1:5
for a3=1:5
for a4=1:5
for a5=1:5
a=[a1 a2 a3 a4 a5];%行号
if length(unique(a))==5
zz=0;
for i=1:4%列号
for j=i+1:5
if ((a(i)+i)==(a(j)+j))||((a(i)-a(j))==(i-j))
zz=1;
break
end
end
if zz==1
break
end
end
if i==4&&j==5
z=z+1;
zzz=[zzz;a];
end
end
end
end
end
end
end
z
zzz
z2=0;
[x,y]=size(zzz);
for i=1:y-1
for j=i+1:y
if length(find(zzz(i,:)-zzz(j,:)))==5
[zzz(i,:);zzz(j,:)]
z2=z2+1;
end
end
end
fprintf('一共有%d种方案\n',z2);
%TAKE IT EASY.JUST HAVE FUN!