<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
(文档请参考:http://blog.csdn.net/CXXSoft/archive/2006/09/28/1299731.aspx)
3、运行效果
4、 算法源码
...{
作品名称:小球问题通用解决方案
开发作者:成晓旭
开发时间:2003年01月22日
完成时间:2003年01月23日
修改时间1:2003年11月14日
增加用户问题条件设置绘制方法
修改时间2:2003年11月18日
增加比较过程的记录功能
}
unitCommon;
interface
uses
Windows,SysUtils,Classes,Graphics,BallType;
//清除画面方法
procedureClearCanvas(aCanvas:TCanvas;aRect:TRect);
//小球问题条件设置方法
procedureDraw_Ball_Config(
AllBall:arrayofTC_Ball;
ACanvas:TCanvas;
aClearRect:TRect;
bShowTrace:Boolean);
//小球问题解决方法
procedureSerach_Error_Ball(
AllBall:arrayofTC_Ball;
ACanvas:TCanvas;
aClearRect:TRect;
bShowTrace:Boolean);
var
strLog1:AnsiString;
strLog2:AnsiString;
strLog3:AnsiString;
implementation
//单元内部常量定义
const
Fir_Pivot_X=200;
Fir_Pivot_Y=80;
Hint_X=10;
One_DrawDelta=140;
One_PreDelta=70;
One_FroDelta=30;
strADyB='比较:A端(重)>B端(轻)'+CHR(13)+CHR(10);
strAXDB='比较:A端=B端'+CHR(13)+CHR(10);
strAXyB='比较:A端(轻)'+CHR(13)+CHR(10);
A_Team='A组:';
B_Team='B组:';
preTail0='号球'+CHR(13)+CHR(10);
preTail1='号球';
proHead='结论:异常球在[';
lastResult='结论:异常球是';
nextHint=CHR(13)+CHR(10)+'启示:';
ErrorHint='命题不严密,请检查设置条件!';
functionSearchBall_At4(AllBall:arrayofTC_Ball;
A,G:arrayofByte;varvErr_Ball_Order:Byte;
varvIsHeavy:Boolean;ACanvas:TCanvas;bShowTrace:Boolean):Boolean;
var
A2,B2:Word;
A3,B3:Word;
Loop:Word;
bNumber:Byte;
bPartA,bPartB:arrayofTC_Ball;
bCmpPara:TC_CmpPara;
str:AnsiString;
begin
vErr_Ball_Order:=0;
vIsHeavy:=False;
A2:=AllBall[A[1]].Weight+AllBall[A[2]].Weight+AllBall[G[1]].Weight;
B2:=AllBall[A[3]].Weight+AllBall[G[2]].Weight+AllBall[G[3]].Weight;
str:=A_Team+IntToStr(AllBall[A[1]].Order)+','
+IntToStr(AllBall[A[2]].Order)+','
+IntToStr(AllBall[G[1]].Order);
str:=str+preTail0;
strLog2:=strLog2+str;
str:=B_Team+IntToStr(AllBall[A[3]].Order)+','
+IntToStr(AllBall[G[2]].Order)+','
+IntToStr(AllBall[G[3]].Order);
str:=str+preTail0;
strLog2:=strLog2+str;
bNumber:=3;
SetLength(bPartA,bNumber);
SetLength(bPartB,bNumber);
bPartA[0]:=AllBall[A[1]];
bPartA[1]:=AllBall[A[2]];
bPartA[2]:=AllBall[G[1]];
bPartB[0]:=AllBall[A[3]];
bPartB[1]:=AllBall[G[2]];
bPartB[2]:=AllBall[G[3]];
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y+One_DrawDelta),
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
ifA2=B2then
begin
A3:=AllBall[A[4]].Weight;
B3:=AllBall[G[1]].Weight;
strLog2:=strLog2+strAXDB;
str:=proHead;
str:=str+IntToStr(AllBall[A[4]].Order);
str:=str+']'+preTail1+'【排3余1】';
strLog2:=strLog2+str;
str:='用任一正常球与之比较,即可知异常球是偏轻偏重!';
strLog2:=strLog2+nextHint+str;
withbCmpParado
begin
Pre_LNumber:=4;
Fro_LNumber:=1;
SetLength(Pre_Latency,Pre_LNumber);
SetLength(Fro_Latency,Fro_LNumber);
forLoop:=0toPre_LNumber-1do
Pre_Latency[Loop]:=AllBall[Loop+9];
Fro_Latency[0]:=AllBall[A[4]];
end;
Balance_One_Latency(Point(Hint_X,Fir_Pivot_Y+One_DrawDelta-One_PreDelta),
Point(Hint_X,Fir_Pivot_Y+One_DrawDelta+One_FroDelta),
bCmpPara,ACanvas,bShowTrace);
bNumber:=1;
SetLength(bPartA,bNumber);
SetLength(bPartB,bNumber);
bPartA[0]:=AllBall[A[4]];
bPartB[0]:=AllBall[G[1]];
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y+One_DrawDelta*2),
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
ifA3=B3then
begin
vErr_Ball_Order:=0;
strLog3:='异常球与正常球一样重!'+ErrorHint;
end
else
begin
vErr_Ball_Order:=A[4];
vIsHeavy:=A3>B3;
end;
end
else
begin
A3:=AllBall[A[1]].Weight;
B3:=AllBall[A[2]].Weight;
ifA2>B2then
strLog2:=strLog2+strADYB
else
strLog2:=strLog2+strAXYB;
str:=proHead;
str:=str+IntToStr(AllBall[A[1]].Order)+','
+IntToStr(AllBall[A[2]].Order)+','
+IntToStr(AllBall[A[3]].Order);
str:=str+']'+preTail1+'【排1余3】';
strLog2:=strLog2+str;
str:='下一轮必须在本轮比较的同一端的两球中进行.即取:'
+IntToStr(AllBall[A[1]].Order)+','
+IntToStr(AllBall[A[2]].Order)
+'号球,在推算结果时,还必须用到此轮A、B端谁轻谁重!';
strLog2:=strLog2+nextHint+str;
bNumber:=1;
SetLength(bPartA,bNumber);
SetLength(bPartB,bNumber);
bPartA[0]:=AllBall[A[1]];
bPartB[0]:=AllBall[A[2]];
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y+One_DrawDelta*2),
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
ifA3=B3then
begin
vErr_Ball_Order:=A[3];
vIsHeavy:=A2B2;
end
else
begin
ifA2>B2then
begin
ifA3>B3then
vErr_Ball_Order:=A[1]
else
vErr_Ball_Order:=A[2];
//IsHeavy:=True;
end
else
begin
ifA3>B3then
vErr_Ball_Order:=A[2]
else
vErr_Ball_Order:=A[1];
//IsHeavy:=NOTTrue;
end;
vIsHeavy:=A2>B2;
end;
end;
Result:=vErr_Ball_Order0;
end;
functionSearchBall_At8(AllBall:arrayofTC_Ball;IsAdyB:Boolean;
A,B,G:arrayofByte;varvErr_Ball_Order:Byte;
varvIsHeavy:Boolean;ACanvas:TCanvas;bShowTrace:Boolean):Boolean;
var
A2,B2:Word;
A3,B3:Word;
bNumber:Byte;
bPartA,bPartB:arrayofTC_Ball;
senPivot,thrPivot:TPoint;
str:AnsiString;
begin
vErr_Ball_Order:=0;
vIsHeavy:=False;
A2:=AllBall[A[1]].Weight+AllBall[A[2]].Weight+AllBall[B[1]].Weight;
B2:=AllBall[A[3]].Weight+AllBall[B[2]].Weight+AllBall[G[1]].Weight;
str:=A_Team+IntToStr(AllBall[A[1]].Order)+','
+IntToStr(AllBall[A[2]].Order)+','
+IntToStr(AllBall[B[1]].Order);
str:=str+preTail0;
strLog2:=strLog2+str;
str:=B_Team+IntToStr(AllBall[A[3]].Order)+','
+IntToStr(AllBall[B[2]].Order)+','
+IntToStr(AllBall[G[1]].Order);
str:=str+preTail0;
strLog2:=strLog2+str;
bNumber:=3;
SetLength(bPartA,bNumber);
SetLength(bPartB,bNumber);
bPartA[0]:=AllBall[A[1]];
bPartA[1]:=AllBall[A[2]];
bPartA[2]:=AllBall[B[1]];
bPartB[0]:=AllBall[A[3]];
bPartB[1]:=AllBall[B[2]];
bPartB[2]:=AllBall[G[1]];
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y+One_DrawDelta),
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
ifA2=B2then
begin
A3:=AllBall[B[3]].Weight;
B3:=AllBall[B[4]].Weight;
strLog2:=strLog2+strAXDB;
str:=proHead;
str:=str+IntToStr(AllBall[A[4]].Order)+','
+IntToStr(AllBall[B[3]].Order)+','
+IntToStr(AllBall[B[4]].Order);
str:=str+']'+preTail1+'【排5余3】';
strLog2:=strLog2+str;
str:</span
分享到:
相关推荐
J2ME中小球碰撞检测之后自动反弹,算法设计非常精巧
Java小球弹跳问题代码示例,这是个经典的Java问题:球从100米高度自由落下,每次落地后反跳回原高度的一半; 再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?计算小球经过十次弹跳之后,经过的总距离...
易语言源码易语言窗口弹小球源码.rar 易语言源码易语言窗口弹小球源码.rar 易语言源码易语言窗口弹小球源码.rar 易语言源码易语言窗口弹小球源码.rar 易语言源码易语言窗口弹小球源码.rar 易语言源码易语言窗口...
app作业十四:棋盘小球.zip
拖动小球观察小球轨迹 using actionScript 2.0
1创建画布 600×500,帧频60 2陆续创建300个圆形小球(小球颜色随机),从中间出现,随机朝个角度移动 3遇到边界朝相反方向移动 4小球移动的方向添加滤镜效果(可选) 5点击当前小球销毁移除
bounce_count :小球弹跳次数 ball_color:小球颜色 ball_count:小球数量 ball_radius:小球半径 ball_delay:小球出现时间间隔(当小球数大于1时) anim_duration:小球一次动画时长 physic_mode : 开启物理效果(下落...
Android 重力感应游戏-疯狂的小球源码程序,基于Android 平台的重力感应游戏-疯狂的小球。
【创意幼教】最新幼儿园小班健康活动教案:快乐小球教案附教学反思(四篇).pdf
[android 游戏源码]物理传感器游戏-小球快跑源码 希望对你有用
android 疯狂的小球 源码android 疯狂的小球 源码
开源(VB代码):超级桌面小球屏保v1.2_VB源码.zip
给定一棵深度为 depth 的满二叉树,并对该二叉树从根结点开始自上而下,每一层从左到右, ...若输入 4 2,则输出 12 若输入 3 4,则输出 7 若输入 10 1,则输出 512 若输入 2 2,则输出 3 若输入 8 128,则输出 255
NULL 博文链接:https://1017401036.iteye.com/blog/2309216
Android 疯狂的小球游戏项目源码
flash源码,跳动的小球,用脚本写的写成的flash源码
问题描述:现有12个外形相同的小球,只有其中一个小球质量不同(不能确定较重还是较轻),请用天平找出是哪个小球不同,而且还要找出究竟是轻是重?条件:只能称三次. 许多人都听说过这个问题吧!本程序演示了这个问题的...
图形学 - OpenGL实现一个跳动的小球源码2个 图形学 - OpenGL实现一个跳动的小球源码2个
控制小球在目标区域移动,击中相同颜色得分,击中白色跳过该回合,击中骷髅结束游戏
解压后运行main脚本即可开始游戏,鼠标左键可以控制小球顺时针、逆时针的运动方向,躲开随机生成的障碍物,尽情得分吧!!