Matlab, 234 238 258 bayt
Giriş dizisinin sayı sırasının fiat tarafından tutulduğu diğer cevapların sınırlamalarına dayanarak varsayıyorum.
n=length(x)-1
k=n*2+2
p=unique(nchoosek(repmat('*-+/',1,n),n),'rows')
p=[p char(' '*~~p(:,1))]'
c=char(x'*~~p(1,:))
o=p(:,r==cellfun(@eval,mat2cell(reshape([c(:) p(:)]',k,[]),k,0|p(1,:))))
reshape([repmat(x',size(o,2),1) o(:)]',k,[])'
Bu kod sayı dizisi alır x, demek x = '12345've bir sonuç r, demek r = 15ve iadeler ifadelerin dizeleri tüm almak için değerlendirebilir rgelen xdört operatörleri kullanarak.
ones(length())-Type veya repmat(length())-type ifadelerini kullanmaktan kaçınmak için iki farklı uzunluk eşdeğeri yol kullandım : ~~p(1,:)bu, not-not değerlerini döndürmez p(yani, 1ilk boyut olarak sam uzunluğunun listesi p) ve 0|p(:,1)0 veya orada döndürür -a-değer-in- p(yani, 1ikinci boyutuyla aynı uzunlukta bir liste p).
Matlab'ın bir nchoosek değiştirme yöntemi yok, bu yüzden operatörleri doğru sayıda kopyaladım, nchoosekdaha geniş operatör seçimi için tüm alanı hesapladım ve ardından uniquesonucu olması gerektiği şekilde çözümlemek için bir çağrı kullandım ('*** +' ve '*** +' gibi eşdeğer kombinasyonları kaldırmak). Birleştirme amacıyla giriş vektörünün uzunluğunu eşleştirmek için bir boşluk ekler ve ardından giriş dizeleri ile operatör dizelerini bir matrisin sütunlarına oluştururum. Daha sonra, sonuçları almak ve girdilerimizle eşleşen sonuçlarla bu sütunlara karşılık gelen işleçlerin sırasını bulmak için ifadeleri sütun olarak değerlendiririm r.
Test: x = '12345', r = 15:
1*2*3+4+5
1+2+3+4+5
1-2*3+4*5
Eğer çift kesinlik değerleri bir dizi almak zorunda olsaydım , benim puan için x = num2str(x,'%d');21 (20 olmadan ;) ekleyerek, bir dizeye rakamları dönüştürmek gerekir . * Ekstra baytlar tamamen bıraktığım noktalı virgüllerdi, böylece bu kodu çalıştıran herkes komut dizisinin uzun dizilerle patlamasını görmeyecekti. Düzenlemem zaten mantıksal ve iki nokta üstüste işlenenlerle ilgili dev bir uyarı yığını ürettiğinden, yeni sürümdeki noktalı virgülleri kaldırdım.
Düzenleme 2: a 2*n+2ile değiştirmeyi unuttum k.
Eski cevap:
n=length(x)-1;
p=unique(nchoosek(repmat(['*','-','+','/'],1,n),n),'rows');
l=length(p);
p=[p repmat(' ',l,1)]';
c=reshape([repmat(x',l,1) p(:)]',n*2+2,[]);
o = p(:,r == cellfun(@eval, mat2cell(c,n*2+2,ones(l,1))));
reshape([repmat(x',size(o,2),1) o(:)]',n*2+2,[])'
*ve/üzerinde precendence var+ve-? İki örneğiniz birbiriyle çelişiyor.