1、g是子程序中的变量,不会对c的值有影响,换句话说,c的值衡为0。
2、对于完全平方数(即4、9、16等),会输出两个相同解。
我认为更改为以下程序:
program z1(input,output)
var a,b,c:longint
procedure check(f:longint)//去掉一个参数
var h:longint
begin
if f=2 then begin c:=0exit end
if f=1 then begin c:=3exit end //把下面两句移到上面更清晰
for h:=2 to trunc(sqrt(f)) do
begin
if h*h=f then
begin write(h,' ',f div h,' ')c:=1break end //此处换用楼上语句可行
if f mod h=0
then begin write(h,' ',f div h,' ')c:=1 end
else c:=c+0
//针对问题1,将原程序中的g改为c可行,子程序中可直接修改主程序中的变量
end
begin
writeln ('input to check if the number is ')
readln(b)
writeln ('It has')
check(b)//此处改动针对问题1,没有必要用两个参数
writeln
if c=1
then writeln('no')
else writeln('yes or 1')
readln
readln
end.
对于该程序的分析:
1、时间复杂度为根号n。(较优)
2、打印顺序参差不齐错落有致...可先将大数储存在数组中最后倒叙输出。
对于第二个程序,问题同程序一中第1个问题(这种算法不存在前面的第二个问题)
应做以下改动:
program z1(input,output)
var a,b,c:integer
procedure check(f:integer)//去掉一个参数
var h:integer
begin
if f=2 then begin c:=0exit end
if f=1 then begin c:=3exit end //把下面两句移到上面更清晰
for h:=2 to f-1 do
if f mod h=0
then begin write(h,' ')c:=1 end
else c:=c+0 //针对问题1,同上
end
begin
writeln ('input to check if the number is ')
readln(b)
writeln ('It has')
check(b) //同上
writeln
if c=1
then writeln('no')
else writeln('yes or 1')
readln
readln
end.
对于该程序的分析:
1、时间复杂度为n。 (一般)
2、打印顺序正常。
请给分O(∩_∩)O~
你想说主窗体和d出来的子窗体么。这个有很多方法,在子窗体写个变量,public的,再写个get ,方法,等关闭子窗体的时候让主窗体去读就行了。子窗体关闭时有一个方法 ShowDialog() == DialogResult.OK,你就可以拿值了。还有别的。看你要什么喽欢迎分享,转载请注明来源:内存溢出
评论列表(0条)