Arrays 在没有任何循环的情况下比较不同大小的数组

Arrays 在没有任何循环的情况下比较不同大小的数组,arrays,matlab,compare,Arrays,Matlab,Compare,问题是这样的: 给定两个数组,a和b都是正整数 一个特殊的数字是一个ai==i的值等于索引的数字 如何检查数组b是否包含a的特殊数字值 例如:a=[9 3 9],b=[3 4 5]。输出为3。如果b或a为空,则输出为0。如果b包含多个特殊编号,则仅显示最小的编号 到目前为止,这是我一直在努力做的事情,我无法从这里取得进展 a = input('Please enter the array a : '); b = input('Please enter the array b : '); ind

问题是这样的:

给定两个数组,a和b都是正整数

一个特殊的数字是一个ai==i的值等于索引的数字

如何检查数组b是否包含a的特殊数字值

例如:a=[9 3 9],b=[3 4 5]。输出为3。如果b或a为空,则输出为0。如果b包含多个特殊编号,则仅显示最小的编号

到目前为止,这是我一直在努力做的事情,我无法从这里取得进展

a = input('Please enter the array a : ');
b = input('Please enter the array b : ');

indexedArray = 1:length(a);
c = a-indexedArray;
t = find(c==0);   
p = find(t==b);
不起作用

顺便说一句:只能使用以下函数:。排序、isempty、all、any、find、sum、max、min、length。没有循环或条件!仅允许使用数组。没有矩阵。无法使用逻辑运算符,如&|


谢谢

好吧,结果可能还是有办法的:。我们利用了一个事实,即数字必须是严格正的,才能成为特殊的数字

%# in case we need to handle empty inputs: replace empty input with 0 or 1, respectively.
a = sum(a(:)',1);
bIsEmpty = isempty(b);
b = sum(b(:)',1); b = max(b,1);

specialNumber = find(a==1:length(a));

maxAB = max(max(a), max(b));

%# "zeros()"
bigVectorForComparisonA = (1:maxAB)*0;
bigVectorForComparisonB = (1:maxAB)*0;

bigVectorForComparisonA(specialNumber) = 1;
bigVectorForComparisonB(b) = 1;

%# instead of &, we add. Find only the smallest match
specialNumberInB = find(bigVectorForComparisonA + bigVectorForComparisonB == 2,1,'first');

out = sum(specialNumberInB) * ~bIsEmpty; %# sum([]) = 0
对于一个稍微漂亮的解决方案,在一个


好吧,结果可能还是有办法的。我们利用了一个事实,即数字必须是严格正的,才能成为特殊的数字

%# in case we need to handle empty inputs: replace empty input with 0 or 1, respectively.
a = sum(a(:)',1);
bIsEmpty = isempty(b);
b = sum(b(:)',1); b = max(b,1);

specialNumber = find(a==1:length(a));

maxAB = max(max(a), max(b));

%# "zeros()"
bigVectorForComparisonA = (1:maxAB)*0;
bigVectorForComparisonB = (1:maxAB)*0;

bigVectorForComparisonA(specialNumber) = 1;
bigVectorForComparisonB(b) = 1;

%# instead of &, we add. Find only the smallest match
specialNumberInB = find(bigVectorForComparisonA + bigVectorForComparisonB == 2,1,'first');

out = sum(specialNumberInB) * ~bIsEmpty; %# sum([]) = 0
对于一个稍微漂亮的解决方案,在一个


我推迟发布我的解决方案,因为我怀疑这个问题是家庭作业。然而,既然OP已经接受了,我也可以发布我的

密码 sum、length、any和min的组合实现了以下目的:

函数out=stupidTutora,b a=suma,1;%如果a为空,则用1×0矩阵替换它 特价商品=aa==1:lengtha;%构造特殊数的向量 b=sumb,1;%如果b为空,则用1×0矩阵替换它 %一些二元乘积骗局 A=特价'*b==b; B=特价品==特价品'*B; ind=anyA==B,1; 温度=最小绑定;%temp是标量、1×0矩阵或[] out=SUMTTEMP,2,1;%在温度为1×0或[]时返回0的技巧 测验
我推迟发布我的解决方案,因为我怀疑这个问题是家庭作业。然而,既然OP已经接受了,我也可以发布我的

密码 sum、length、any和min的组合实现了以下目的:

函数out=stupidTutora,b a=suma,1;%如果a为空,则用1×0矩阵替换它 特价商品=aa==1:lengtha;%构造特殊数的向量 b=sumb,1;%如果b为空,则用1×0矩阵替换它 %一些二元乘积骗局 A=特价'*b==b; B=特价品==特价品'*B; ind=anyA==B,1; 温度=最小绑定;%temp是标量、1×0矩阵或[] out=SUMTTEMP,2,1;%在温度为1×0或[]时返回0的技巧 测验
这是家庭作业吗?是a和b向量,还是可以是高维数组、矩阵等?向量。。设法与ismember合作。。但是不能使用这个函数。a和b是一维数组。这真是一个做作的家庭作业问题。无法使用评论中的任何专门功能就像告诉某人只用石头和火做饭一样。有了这些工具,MATLAB就变得独一无二了。如果你不能使用它们,那么使用MATLAB就没有意义了。@rayryeng:我同意。它可能会教我们一些关于索引的知识,尽管我看到了我的解决方案,但是与其让人们做谜题,为什么不让他们做一个索引在现实问题中实际有用的问题呢?这是家庭作业吗?是a和b向量,还是可以是高维数组、矩阵等?向量。。设法与ismember合作。。但是不能使用这个函数。a和b是一维数组。这真是一个做作的家庭作业问题。无法使用评论中的任何专门功能就像告诉某人只用石头和火做饭一样。有了这些工具,MATLAB就变得独一无二了。如果你不能使用它们,那么使用MATLAB就没有意义了。@rayryeng:我同意。它可能会教一些关于索引的知识,虽然你看到了我的解决方案,但与其让人们做谜题,为什么不让他们做一个索引在现实世界中实际有用的问题呢?+1-这是我基本上的想法,但当我无法使用时,我会生气。感谢您解决了这个糟糕透顶的问题。问题包含以下规范:如果b或a为空,则输出为0。如果a为空,则您的方法失败;你得到一个矩阵维数必须一致的错误。@Jubobs:我认为没有处理空输入的要求。不管怎样,我可以解决这个问题。我们不允许使用unique。很抱歉,这个问题让人头疼。顺便说一句,如果a或b为空,则显示0。@Osh24-无意冒犯,但你的MATLAB导师太差劲了。他们应该教你如何有效地使用MATLAB,而不是让你在10行代码中跳来跳去,当它可以在2行代码中完成时。

这可能是我在StackOverflow上回答问题的历史中读到的最令人沮丧的问题。一半是因为你忘记了需求,你不得不不断地修改你的问题。+1-这是我本质上的想法,但当我不能使用时,我很生气。感谢您解决了这个糟糕透顶的问题。问题包含以下规范:如果b或a为空,则输出为0。如果a为空,则您的方法失败;你得到一个矩阵维数必须一致的错误。@Jubobs:我认为没有处理空输入的要求。不管怎样,我可以解决这个问题。我们不允许使用unique。很抱歉,这个问题让人头疼。顺便说一句,如果a或b为空,则显示0。@Osh24-无意冒犯,但你的MATLAB导师太差劲了。他们应该教你如何有效地使用MATLAB,而不是让你在10行代码中跳来跳去,当它可以在2行代码中完成时。这可能是我在StackOverflow上回答问题的历史中读到的最令人沮丧的问题。一半是因为你忘记了需求,不得不不断修改你的问题。我喜欢你的函数名-+1。@rayryeng我从你的评论中得到了灵感:它最初没有提到矩阵,这就是我的解决方案。OP纠正了我,说他们是不允许的。自该帖子创建以来,他或她至少更改了三次规范。这可能是我对这个问题不屑一顾的原因。。。。事实上这完全是人为的。@rayryeng ffs。。。我也放弃这个问题。让它被否决而被遗忘。@Jubobs-非常同意我的朋友。我喜欢你的函数名-+1。@rayryeng我从你的评论中得到了灵感:它最初没有提到矩阵,这就是我的解决方案。OP纠正了我,说他们是不允许的。自该帖子创建以来,他或她至少更改了三次规范。这可能是我对这个问题不屑一顾的原因。。。。事实上这完全是人为的。@rayryeng ffs。。。我也放弃这个问题。让它被否决而被遗忘吧。@Jubobs-我的朋友,我非常同意。
%               a           b                 result
stupidTutor([9 9 3 9]  , [3 4 5])       %       3  
stupidTutor([9 9 3 9]  , [9 8])         %       0
stupidTutor([9 9 9 9 5], [3 4 5 3])     %       5
stupidTutor([9 9 3 9 5], [3 4 5 3])     %       3
stupidTutor([9 9 3 9 5], [5 4 3 2 1])   %       3
stupidTutor([9 9 3 9]  , [])            %       0
stupidTutor([]         , [3 4 5])       %       0
stupidTutor([]         , [])            %       0