数的计数
pascal吧
全部回复
仅看楼主
level 1
水若薇儿 楼主
找出具有下列性质的数1、不做任何处理;2、在它左边加上一个自然数。但该自然数不能超过原数的一半;3、加上此书后,继续处理,直到不能再加为止。如输入100则得到50100、2550100、122550100,6122550100,36122550100、
13612255010
0,此时,为止。可不可以帮我编一个程序
2006年05月15日 09点05分 1
level 0
var ss,ss1:string; si,si1:integer;begin write('input number:'); readln(ss); val(ss,si,si1); while si>1 do begin si:=si div 2; str(si,ss1); ss:=ss1+ss; writeln(ss); end; readln;end.
2006年05月15日 10点05分 2
level 1
水若薇儿 楼主
这个程序真棒!可不可以给我解释一下val,str什么意思,怎么用?妹妹是个初学者!!!!我这儿还有一个程序,书上写的,可我总觉得怪怪的!因为这个程序的出的结论不一定对!有谁可以告诉我为什么吗?vars:longint;n:integer;procedure change(n:longint);vari:integer;begininc(s)for i:=1 to n div 2 do change(i);end;beginread(n);s=0;change(n);writeln(s);end.
2006年05月18日 08点05分 3
level 1
水若薇儿 楼主
procedure change(n:longint); var i:integer; begin inc(s) for i:=1 to n div 2 do change(i); end;尤其是这几步,不大懂
2006年05月18日 08点05分 4
level 0
这不是NOIP好几年前初中组的一道题么?
2006年05月19日 15点05分 5
level 6
帖主 书上的这程序跑起来确实不对;但算法高明(递归)我修改一下应该没问题拉:var s:string; n:longint;procedure change(n:longint); var i:string; begin if n>3 then begin n:=n div 2; str(n,i); s:=i+s; writeln(s); change(n) end; end;begin read(n); str(n,s); change(n); writeln('1'+s);end.
2006年05月21日 07点05分 6
level 1
水若薇儿 楼主
是呀,是那个什么什么考试的题,谢谢拉!
2006年05月25日 08点05分 7
level 6
我是6楼,题目没看清阿,书上程序是对的
2006年11月12日 05点11分 8
level 0
2楼的错了。这道题求的是种数!!!书上的程序是对的。不过数据一大就又会出错。我的做法是动态规划。以f[i]表示以i为初始值,得到的种数。那么f[i]应该等于f[1]+f[2]+...+f[i div 2]。初值是f[1]:=1。由此可得:var i,j:longint; f:array[1..10000] of lognint;begin fillchar(f,sizeof(f),0); f[1]:=1; for i:=2 to n do for j:=1 to i div 2 do f[i]:=f[i]+f[j]; writeln(f[i])end.这样的程序时间复杂度为O(n^2),还可以通过一些优化降至O(n),在这里我就不多说了。
2006年11月12日 10点11分 9
level 0
可不可以给我解释一下val,str什么意思,怎么用?
2007年06月09日 10点06分 10
level 4
其实用递归还是蛮简单的o(∩_∩)o...
2008年07月27日 09点07分 12
level 0
最好的程序是9楼的。
2008年07月30日 03点07分 13
level 0
跑1000的,递归1分多钟,动归半秒钟就搞定了。这就是差距。
2008年07月30日 03点07分 14
level 1
var n:integer;
function f(x:integer):integer;
var i:integer;
begin
if x=1 then f:=1
else begin
f:=1;
for i:=1 to x div 2 do f:=f+f(i);
end;
end;
begin
read(n);
writeln(f(n));
end.
2013年10月17日 16点10分 15
level 1
对了。f的范围要设成longint,否则最后一个点过不去。。。。
2013年10月17日 16点10分 16
level 1
你们的都超时或不对,9楼的接近正确答案,但有点偏差。
var i,j,n:longint;
f:array[1..10000] of longint;
begin
read(n);
f[1]:=1;
for i:=2 to n do
begin
f[i]:=1;
for j:=1 to i div 2 do f[i]:=f[i]+f[j];
end;
writeln(f[n]);
end.
2015年04月16日 12点04分 17
其实你的也可以超时。
2015年04月18日 14点04分
level 11
挖坟[怒]
2015年04月17日 13点04分 18
level 5
递归
2015年04月18日 13点04分 19
level 8
dfs
2015年04月19日 02点04分 20
动态规划也行
2015年04月20日 13点04分
level 8
吧里好多人问这道题
2015年04月20日 13点04分 21
1