算法思路:希望用x作为行,i作为列.每往下一行就减少一列,减少的列为delid所示的数.
但我的程序代码做出来后,在第一行已经被减掉的数字还在后面的行中出现.请高手帮忙指正错在哪里了,不胜感激.
i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8
x=1 1 2 3 4 6 7 8
x=2 1 2 3 4 7 8
x=3 1 3 4 7 8
x=4 1 4 7 8
x=5 1 7 8
x=6 1 8如上是我想实现的结果,但我写的程序在x=3的时候为 1 4 5 7 8 ;x=4 时为 1 6 7 8 都和预期不一致.请高手指正.
var i:integer;
x:integer;
y:integer;
w:string;
const delid:array[1..6] of integer =(5,6,2,3,4,7);function Deid (x,i: integer): integer;
var h:integer;
f:integer;
g:integer;
temp:integer;
p:integer;
min:integer;
begin
temp:=9;
min:=0;
for f:=1 to x do
begin
g:=1;
while g <=x do
begin
p:=delid[g];
if p <temp then
begin
if p>min then
begin
h:=p;
p:=temp;
temp:=h;
end;
end;
g:=g+1;
end;
if i>=temp then
begin
i:=i+1;
end;
min:=temp;
temp:=p;
end;
result:=i;
end;begin
with adoquery1 do
begin
close;
sql.clear;
sql.add('create table b (x1 integer,i1 integer,str integer)');
execsql;
end;for x:=1 to 6 do
begin
for i:=1 to 8-x do
begin
w:=deid(x,i);
with adoquery1 do
begin
close;
sql.clear;
sql.add('insert into b (x1,i1,str) values(x,i,w)');
parameters.parambyname('x').value:=x;
parameters.parambyname('i').value:=i;
parameters.parambyname('w').value:=w;
execsql;
end;end;
end;
end;
end;
但我的程序代码做出来后,在第一行已经被减掉的数字还在后面的行中出现.请高手帮忙指正错在哪里了,不胜感激.
i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8
x=1 1 2 3 4 6 7 8
x=2 1 2 3 4 7 8
x=3 1 3 4 7 8
x=4 1 4 7 8
x=5 1 7 8
x=6 1 8如上是我想实现的结果,但我写的程序在x=3的时候为 1 4 5 7 8 ;x=4 时为 1 6 7 8 都和预期不一致.请高手指正.
var i:integer;
x:integer;
y:integer;
w:string;
const delid:array[1..6] of integer =(5,6,2,3,4,7);function Deid (x,i: integer): integer;
var h:integer;
f:integer;
g:integer;
temp:integer;
p:integer;
min:integer;
begin
temp:=9;
min:=0;
for f:=1 to x do
begin
g:=1;
while g <=x do
begin
p:=delid[g];
if p <temp then
begin
if p>min then
begin
h:=p;
p:=temp;
temp:=h;
end;
end;
g:=g+1;
end;
if i>=temp then
begin
i:=i+1;
end;
min:=temp;
temp:=p;
end;
result:=i;
end;begin
with adoquery1 do
begin
close;
sql.clear;
sql.add('create table b (x1 integer,i1 integer,str integer)');
execsql;
end;for x:=1 to 6 do
begin
for i:=1 to 8-x do
begin
w:=deid(x,i);
with adoquery1 do
begin
close;
sql.clear;
sql.add('insert into b (x1,i1,str) values(x,i,w)');
parameters.parambyname('x').value:=x;
parameters.parambyname('i').value:=i;
parameters.parambyname('w').value:=w;
execsql;
end;end;
end;
end;
end;
解决方案 »
- 关于用ADOQuery往Access数据库中保存和读取图片的问题。
- 高手赐教 制作一个Com接口的开关?
- 请各位大侠进来看一看!!回复即可送分.
- 请帮忙,如何取指定word文件内的文本内容
- 关于内存分配的问题
- delphi连接Sybase数据问题**(在线等待)************************
- 哪位做过dbchart动态动创建serial并给上某一个dataset的值?
- 除使用Hook外,还有重定义键盘的方法吗?
- 谁能告诉我关于程序员考试方面的事?
- 各位大虾,紧急求救!pos机客户显示屏为什么不显示?
- 打印DBGridEh,要求多表头标题左对齐
- 谁能给我一个简单的发短信的软件!!!!!!急!!!!!!!
s:string;s:='11234678';你要次第剪掉第一个,for i:=1 to length(s) do
s:=delete(s,1,1);搞掂,比用数组容易。
给你写个新的代码。
var
i,j:integer;
strs:TStringList;
const delid:array[1..6] of integer =(5,6,2,3,4,7);
begin
strs:=TStringList.Create;
for i:=1 to 8 do
strs.Add(IntToStr(i));///////加如初始值1----------8
............... for i:=1 to 6 do
begin
strs.Delete(strs.IndexOf(IntToStr(delid[i])));
for j:=0 to strs.Count-1 do
with adoquery1 do
begin
close;
sql.clear;
sql.add('insert into b (x1,i1,str) values(x,i,w)');
parameters.parambyname('x').value:=i;
parameters.parambyname('i').value:=j+1;
parameters.parambyname('w').value:=strs.Strings[j];
execsql;
end;
end;
strs.Free;
end;
a:Array[0..7] of integer;
i,j:integer;
s:string;
xLast,iValidCnt:integer;
const delid:array[1..6] of integer =(5,6,2,3,4,7); function Deid (x,i: integer): integer;
var
f:integer;
g:integer;
begin
if xLast<x then
begin
for f:=0 to iValidCnt-1 do
if delid[x]=a[f] then
begin
for g:=f to iValidCnt-2 do
a[g]:=a[g+1];
inc(iValidCnt,-1);
break;
end;
end; xLast:=x;
Result:=a[i-1];
end;
begin
for i:=1 to 8 do
a[i-1]:=i; ///////初始化数组,添入值1-------8
xLast:=0;////////////上次过滤的位置,为了和你的原来函数用法一致,增加的变量
iValidCnt:=8;///////目前数组有效长度 for x:=1 to 6 do
begin
s:='';
for i:=1 to 8-x do
begin
w:=IntToStr(deid(x,i));
.......................
end;
end;end;
我原来的程序如下,其实是想实现决策树的算法,x表示树的层数,y表示每层中的树枝,i表示这个树枝中的第i个数.上面的我简化成了每层只有一个树枝.但不会变成三维了.
下面程序中的delid[g,j]是其他地方调用过来的,就是g层中第j个树枝要删掉的数.
帮我看看吧,搞了几天了,头都大了.不胜感激.
function Deid (x,y,i: integer): integer;
var j:integer;
h:integer;
f:integer;
g:integer;
temp:integer;
p:integer;
min:integer;
begin
delid[1,1]:=5;
delid[1,2]:=5;
temp:=9;
min:=0;
for f:=1 to x do
begin
g:=1;
while g<=x do
begin
j:=ceil(y/(power(2,(x-g))));
p:=delid[g,j];
if (p<temp) and (p>min) then
begin
h:=p;
p:=temp;
temp:=h;
end;
g:=g+1;
end;
if i>=temp then
begin
i:=i+1;
end;
min:=temp;
temp:=p;
end;
result:=i;
end;