不知道这是不是最好的头衔。下面是对程序的解释,我的版本只适用于第一个例子,但在第二个例子中不起作用,因为我无法想出一个很好的方法来处理这么多的变化,特别是当K大于3且极限为50时。我的版本:
N, K, M = map(int, input().split())
niz = list(map(int, input().split()))
nizk = list(range(1, K+1))
izlazi = []
for r in range(0, M):
operacija = list(map(int, input().split()))
index = 0
i
所有人!在查找列表中最小元素的所有出现位置时,我遇到了一些问题。
我的源代码如下:
**
findPos([], _, []).
findPos([_],_,[1]).
findPos([H1|Tail], Pos, [Pos|Ta]):-
% "Pos" is the current position in the list
findMin([H1|Tail], V),
V=[H1],
Pos2 is Pos+1,
findPos([Tail], Pos2, [Ta]).
findPos([H1|Tail], Pos
我们想要构建一个谓词,它获得一个列表L和一个数字N,如果N是列表L的最长序列的长度,则为真。例如:
?- ls([1,2,2,4,4,4,2,3,2],3).
true.
?- ls([1,2,3,2,3,2,1,7,8],3).
false.
为此,我建造了-
head([X|S],X). % head of the list
ls([H|T],N) :- head(T,X),H=X, NN is N-1 , ls(T,NN) . % if the head equal to his following
ls(_,0) :- !. % get seq in length N
我想开发一个函数来评估一个列表并找到其中的最小值。我所做的是:
minimum([X],X).
minimum([X|Y],N) :- minimum(X,N), X < N.
minimum([X|Y],N) :- minimum(Y,N), X > N.
但是,第二和第三条规则似乎是错误的,因为它说的是错误的。
我认为这是因为我使用最小值(X,N)递归调用,并且它犯了一个错误,所以我检查了:
minimum([X],X).
minimum([X|Y],N) :- minimum(X,X), X < N.
minimum([X|Y],N) :- minimum(Y,Y),