سلام من می خوام یه برنامه بنویسم که اعداد رندوم باینری تولید کنه بعد در هر مرحله صفرها تا قبل از یک رو با هم جمع کنه و اعلا م کنه و از بعد از آخرین یک مجدد صفرها رو تا قبل یک بعدی جمع کنه (یعنی مثلا 000000111100000 را به صورت [5 6 ] نشون بده) ممکنه کمکم کنید؟
اون چیزی که به ذهن خودم رسیده این مدلیه :
n=1
pai=[......] (یه ماتریس بین صفر و یک که دو هزار سطر داره)
y=binorand(n,pai)
fori=1:2000
if y(i)==0
B=1;
sum=0;
sum=sum+B
D=[sum]
y=[D]
else
B=0
sum=sum+B
end
end
ولی جواب مطلوب رو نمی گیرم می شه راهنماییم کنید؟
کد:
r=round(20000000*rand+1)
a=dec2bin(r)
d=double(a=='0');
dd=diff(d);
R=find(dd==-1);
L=R+1;
L=[1,L]
R=[R,length(d)]
s=[];
for k=1:length(L)
s=[s,num2str(sum(d(L(k):R(k))))];
end
if s(end)=='0'
s(end)=[];
end
s
این هم تستش:
کد:
r =
17825980
a =
1000100000000000010111100
L =
1 5 18 20
R =
4 17 19 25
s =
31212
آخرین ویرایش: