-
你能教我吗?
Basic] 二进制到十进制。
时间限制:1000ms 内存限制:1000k答案数:385 通过次数:244
问题描述]将二进制数转换为十进制输出。
输入描述]一行,一个二进制数,二进制位数小于32位。
输出说明]十进制整数。输入样本]。
输出示例]问题**]。
-
我不明白你的算法,我个人认为没有必要搜索这个。
如果只想输出一个结果,则可以在检查部分的输出部分添加停止。
但是,halt 之前必须关闭文件输入和输出。
-
数字 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.我已经尝试了改进的程序,它很好用。
-
将进程定义变量更改为 。
vari:longint;
-
在 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];.
我总觉得有点跑题)
上面,这句话和回溯没有关系,有时候没有这句话也可以做回溯。
-
是过河者吗?
这表示马步,分别由水平和垂直坐标的变化表示。
画出你自己的图画,看看......
-
2 11 2
一个二维数组,4 行和 2 列。
-
递归,对吧?
我的机器上没有机器,但我相信你的功能放置部分有问题。 注意第一句话 if place=true then....把它剪下来试试。
还有第二个 if place: =true then 应该改为 if place=true then
-
你的问题应该是 N 女王问题。
你的程序从头到尾都是错误的。
可以有一种回溯算法来解决这个问题。
也可以使用递归。
去看看吧。
-
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个数据。
-
while jbeginj:=j+i;
p[j]:=false;
end;错。 两个数字的总和可能大于 n*n。
-
您好,解释一下做法。
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
-
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
你爱家人很正常,是所有人,但你太在乎这种感觉了,而你自己对家的爱也不是精神疾病,只是你太在乎这种感觉了,你总是感到孤独寂寞,这会导致性格内向,容易引起精神疾病。 所以,你现在很正常,不要想太多。 >>>More