有关回溯的问题,请查看我的程序 PASCAL 出了什么问题

发布于 收藏 2024-08-03
13个回答
  1. 匿名用户2024-01-31

    你能教我吗?

    Basic] 二进制到十进制。

    时间限制:1000ms 内存限制:1000k答案数:385 通过次数:244

    问题描述]将二进制数转换为十进制输出。

    输入描述]一行,一个二进制数,二进制位数小于32位。

    输出说明]十进制整数。输入样本]。

    输出示例]问题**]。

  2. 匿名用户2024-01-30

    我不明白你的算法,我个人认为没有必要搜索这个。

    如果只想输出一个结果,则可以在检查部分的输出部分添加停止。

    但是,halt 之前必须关闭文件输入和输出。

  3. 匿名用户2024-01-29

    数字 n 无法获得,很明显 pd 的东西有问题。

    而且你不应该一开始就给数组一个值。

    我对您的程序进行了一些更改。

    为了调试程序,我删除了您的文件输入和输出。

    var a:array[0..15] of longint;b:array[1..100]of boolean;

    i,n,m:longint;

    procedure find(k:longint);

    var j,pd:longint;s:string;

    beginif k>m then begin for j:=1 to m do write(a[j],'writeln;end

    if b[j]=false then begin b[j]:=true;a[k]:=j;find(k+1);b[j]:=false;end;

    end;begin

    fillchar(b,sizeof(b),false);

    readln(n,m);

    a[0]:=1;删除数组的初始值并将其更改为 a 的初始值,因为在搜索第一个位置时会使用 a[0]

    find(1);

    end.我已经尝试了改进的程序,它很好用。

  4. 匿名用户2024-01-28

    将进程定义变量更改为 。

    vari:longint;

  5. 匿名用户2024-01-27

    在 pascal 中,CONST 语句是由常量定义的语句,例如 const pi=,其值定义 pi 且无法更改,const x:array[1..

    4,1..2] of integer =((2,1),(1,2),(1,2),(2,1));

    在第一句话中,定义了数组 x。

    此语句等效于:

    x[1,1]:=2; x[1,2]:=1; x[2,1]:

    1; x[2,2]:=2; x[3,1]:=-1; x[3,2]:

    2; x[4,1]:=-2; x[4,2]:=1;

    这一步通常是对象在平面图中陈述动作的伏笔。

    函数过程就是这样一个步骤:

    for i:=1 to 4 do beginx:=,1];

    y:=,2];.

    我总觉得有点跑题)

    上面,这句话和回溯没有关系,有时候没有这句话也可以做回溯。

  6. 匿名用户2024-01-26

    是过河者吗?

    这表示马步,分别由水平和垂直坐标的变化表示。

    画出你自己的图画,看看......

  7. 匿名用户2024-01-25

    2 11 2

    一个二维数组,4 行和 2 列。

  8. 匿名用户2024-01-24

    递归,对吧?

    我的机器上没有机器,但我相信你的功能放置部分有问题。 注意第一句话 if place=true then....把它剪下来试试。

    还有第二个 if place: =true then 应该改为 if place=true then

  9. 匿名用户2024-01-23

    你的问题应该是 N 女王问题。

    你的程序从头到尾都是错误的。

    可以有一种回溯算法来解决这个问题。

    也可以使用递归。

    去看看吧。

  10. 匿名用户2024-01-22

    while i<=2*n do

    beginwhile not(p[i]) do inc(i);

    j:=i;while j<2*n*n dobeginj:=j+i;

    p[j]:=false;

    end;i:=i+1;

    end;你找素数范围的筛方法写得很小,两个数字相加的范围应该是<2*n*n,所以需要改成while j<2*n*n do,i的范围也应该改成while i<=2*n do,但好像只能得到n<5个数据。

  11. 匿名用户2024-01-21

    while jbeginj:=j+i;

    p[j]:=false;

    end;错。 两个数字的总和可能大于 n*n。

  12. 匿名用户2024-01-20

    您好,解释一下做法。

    bool c[255*100] c[j] 记录面值。

    没有作为 J 合成的方案。

    count[j] 是当前剩余面值为 J 的图章数。

    核心方法:

    procedure try (count[255]:integer;sum:integer;use:integer) sum 是当前总和,use 是使用的硬币数量。

    beginif use>n then exit;如果超过限制,则退出子例程将不再继续。

    c[sum]=true;当前合并的总数可以合并,因此请将此字段填写为 true

    对于 i:=1 到 255,Do 详尽地涵盖了所有面额。

    如果 count[i]>0 个图章可用。

    开始尝试。

    count[i]:=count[i]-1;在我使用它的时候,-1 暂时

    try(count[255],sum+i) 并添加此选择的面值 i

    count[i]:=count[i]+1;恢复可用的面额数量。

    end;end;

    主程序的开头是:

    beginread(m,n);

    for i:=1 to m do

    beginread(tmp);count[tmp]:=n;初始化。

    end;try(count[255],0,n);尝试组合的可能性。

    对于 i:=1 到 25500 所有可能的组合 temp 是连续的数目,如果 (c[i]=false) temp:=0

    else begin

    temp:=temp+1;

    if temp>ans ans:=temp;与答案进行比较以找到最大值。

    end;writeln(ans);

    end.如果你不明白,你可以问:)希望采用它并长期玩XD

  13. 匿名用户2024-01-19

    1.建议不要使用 const,在主程序上读取 ln(n);

    2. a[1]:=i;

    这里错了,它应该是 a[i]:=i; 你把它写成 a[1]3 for i:=1 to n do

    begina[1]:=i;

    find(2)

    到这里结束 find(2),不要把它放在循环里,正确的是 i:=1 到 n do

    begina[1]:=i;

    endfind(1);

    4.创建一个数组以确定 i 是否重复。

    b:array[1..100]of boolean;

    一开始所有的 i 都是假的 fillchar(b,sizeof(b),false);

    5. for i:=1 to n do

    for j:=1 to k-1 do

    beginif i<>a[j] then begina[k]:=i;

    find(k+1)

    endend

    然后它在这里被改变了。

    for i:=1 to n do

    beginif b[i]=false then beginb[i]:=true

    a[k]:=i;

    find(k+1);

    b[i]:=false;

    结束,如果你不明白,再问一遍。 end

相关回答
27个回答2024-08-03

你爱家人很正常,是所有人,但你太在乎这种感觉了,而你自己对家的爱也不是精神疾病,只是你太在乎这种感觉了,你总是感到孤独寂寞,这会导致性格内向,容易引起精神疾病。 所以,你现在很正常,不要想太多。 >>>More

29个回答2024-08-03

其实,机器已经买好了,不可能改配置吧?(除非你的朋友很有钱),你的配置一般还可以,但是主板和显卡有点差。 >>>More

3个回答2024-08-03

吩咐主(家旭)守门的狗。 口快舌利,心不强,权威权威,口碑遍天下; 夫妻相容; 女人过着富裕的丈夫生活,赚钱和建立家庭。 >>>More

15个回答2024-08-03

只能遗憾地说,集成显卡的《鬼泣4》是不可能运行的。。即使效果被关闭到最低,也是同一张卡。。。 >>>More