版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Chapter14
RECURSION
1.SolutionstoandRemarksonSelectedProgrammingAssignments
1.FibonacciNumbers
ThesesolutionshavebeentestedundertwoLinuxversionsusingtwoversionsofg++,
underWindowsXPwithVC++6.0andBorland5.0.Thefullrecursiveversionisslow.It
takesabout17secondsfor1computationofFibl(35)onanolder,veryslowmachine
(i486DX2/100,16MBRAM).Onamoremodemmachine(1GHzAthlon.266MHz
frontsidebus,512MBDDRRAM,fastdiskdrives)itrunsabitfaster:N=35takes3
seconds,N=40takesabout30seconds,N=41about50seconds,andN=42takes80
seconds.AvalueofNgreaterthan47resultsinintegeroverflowandincorrectresultswith
allthecompilersmentionedabove.
Withmostimplementations,longintisatypethesamesizeasint.Becausethereare
afewimplementationsthatprovidealongintthatislongerthananint,Iusedlong
astheargumentandreturntypesforthefibfunction.
TogetFibonaccinumbersuptoN=5()forcheckingtheresultsoftheprogram,Ichanged
thelongtypeintherecursivefunctiontolonglong(a19digitintegertypesupported
byGNUg++,butnotANSI/ISOC++).Icompiledthisusingg++-3.0undertheDebian
Linux3.0operatingsystemonaK6-2/350witha100MHzbackplaneand400KRAM.On
thissomewhatslowmachine,thisversionoftheprogramtookabouttwohoursforN==50,
givingpresumablycorrectresults.(IacknowledgethatIdidnotlookthemup.)Theresults
agreewiththecodewithalongreturnandlongparametertypeuptoN=47.
ThisfunctioncomputesanddiscardstoomanyoftheFibonaccinumbers.Thiskindof
recursioniscalledUmbrellarecursion'becauseitspreadslikeanumbrella,recomputing
valuesmanytimes.
1
Copyright©2008PearsonEducation,Inc.PublishingasPearsonAddison-Wesley
//File:chi4prglFibonacci.cc
//Chapter14,ProgrammingProblem#1
//Writearecursivefunctionforafunctionhavingone
//parameterthatgeneratesthenthFibonaccinumber.
#include<iostream>
♦include<cmath>
//Thisisthefullrecursiveversion.
unsignedlongFibl(intn)
(
if(n==0||n==1)
return1;
returnFibl(n-1)+Fibl(n-2);
}
intmain()
(
usingnamespacestd;
charans;
intN;
do
(
cout<<111willdisplayfibonaccinumbers0-N.\nn;
cout<<"Enteranlimit,\nH;
cin>>N;
for(inti=0;i<N;i++)
cout<<Fibl(i)<<endl;
cout<<nY/ytocontinue,anythingelsequits\nn;
cin>>ans;
(Y
11
}whileoansIIy==ans);
return
}
2.RecursiveIndexofSmallest
CAUTIONS:Pleasewarnthestudentthatnumber_usedisNOTthelargestindexused,ratherit
isthenumberofelements.
Thiswasmyhardest-to-find-errorincodingthis.Ialsorecommendthatthestudentremovethe
SortfunctionfromDisplay10-12.IncludingSortobscuresthebehaviorofthe
index_of_smallest.Ihaditfindingthemaximum,butIdidn'tspotthatuntilIremoved
thesortroutineanditssupportroutines.
Thisismodifiedfromcodeofthetext.Ipreferthatthestudentnotreinventthewheel:use.She
shouldreusecodefromthetext'sDisplaystoadvantage!
//file:chl4prg2.cc
//Teststheprocedurerecursivefunctionindex_of_smallest
//Sortroutineremovedtosimplifythetestingenvironment.
♦include<iostream>
voidfill_array(inta口,intsize,int&number_used);
//Precondition:sizeisthedeclaredsizeofthearraya.
//Postcondition:number_usedisthenumberofvaluesstored
//ina[0]througha[number_used-1]havebeenfilledwith
//nonnegativeintegersreadfromthekeyboard.
intindex__of_smallest(constinta口,
intstart_indexzintnumber__used);
//NOTE:designandimplementationofthisfunctionareat
//theendofthisfile.
//Precondition:0<=start_index<number_used.
//Referencedarrayelementshavevalues.
//Returnvalueistheindexisuchthata[i]isthesmallest
//ofthevalues
//a[start_index],a[start_index+1a[number_used-1].
intmain()
usingnamespacestd;
cout<<"Thisprogramtestsrecursivefunction"
<<nindex_of_smallest”<<endl<<endl;
intsample_array[10],number_used;
fill_array(sample_array<10,number__used);
intiindex_of_smallest(sample_array,0znumber_used);
cout<<“Th㊀numberofelementsis”
<<number__used<<endl;
cout<<“FortheminimumelementinthearrayINDEX="
<<i<<endl;
cout<<“Thearrayelementis”<<sample_array[i]
<<endl<<endl;
cout<<nTheelementsinthearrayare:\nn;
for(intindex=0;index<number_used;index++)
cout<<sample_array[index]<<
cout<<endl;
return0;
}
//Usesiostream
voidfill_array(inta口,intsize,int&number_used)
(
usingnamespacestd;
cout<<"Enterupto"<<size
<<”nonnegativewholenumbers.\nH
<<"Marktheendofthelistwith”
<<”anegativenumber.\nu;
intnext,index=0;
cin>>next;
while((next>=0)&&(index<size))
(
a[index]=next;
index++;
cin>>next;
)
number_used=index;
)
RecursiveFunctionIndex_of_Smallest
Thisrecursivefunctionreturnstheindexoftheminimumelementinthearraysegmentbetween
start_indexandnumber_used.
NonrecursiveCase:Ifwehaveonlyoneelementinasubarraywherestart_indexhasthe
valuenumber_usedthenthatelementistheminimum,andstart_indexistheindexwe
want.
RecursiveCase:Ifthereismorethanoneelement,taketheelementwithsmallestindexand
compareitsvaluetotheminimumvalueofthearrayelementatindexreturnedbythefunction
operatingontherestofthearray.
intindex_of_smallest(constinta口,intstart_indexzint
number_used)
(
if(start_index==number_used-1)
returnstart_index;
intmin=a[start_index];
intindex_of_min=
index_of_smallest(a,start_index+lrnumber_used);
if(min>a[index_of_min])
returnindex_of_min;
else
returnstart_index;
)
Atypicalrun:
Thisprogramtestsrecursivefunctionindex_of_sma11est
Enterupto10nonnegativewholenumbers.
Marktheendofthelistwithanegativenumber.
435603-1
Thenumberofelementsis6
FortheminimumelementinthearrayINDEX=4
Thearrayelementis0
Theelementsinthearrayare:
435603
Anothertestrun:
Thisprogramtestsrecursivefunctionindex_of_smallest
Enterupto10nonnegativewholenumbers.
Marktheendofthelistwithanegativenumber.
9238456329-1
Thenumberofelementsis10
FortheminimumelementinthearrayINDEX=1
Thearrayelementis2
Theelementsinthearrayare:
9238456329
3.NoSolutionProvided.
4.BinomialCoefficients.
Writearecursivefunctionthatusesthegivenrecursiveformulatocalculatebinomial
coefficients.Test.
Asecondpartgivesaconventionalformulaforthefactorial,instructsthestudentto
discoverarecursiveversionsandtowritearecursivefunctionforthefactorial.Test.
Notesonlyonthisproblem.ThestudentsshouldhaveseenthePascalTrianglein
mathematicscoursesbythistime.Ifnot,suggestittothem.Idoitthisway:
(x+y)1=1*x+l*y
(x+y)2=l*x2+2*x*y+2*y2
(x+y)3=l*x3+3*x2*yx+3*x1:7+y3
(x+y)4=1*x4+4*x3*y1+6*x2*y2+4*x1*y3+y'
(x+y)3=l*x5+5*x4*y1+10*x3*y2+10*x2*y3+5*x1*y4+
Wherethecoefficientsare
11
121
1331
14641
15101051
Thecoefficients,whenrearrangedare:
121
1331
14641
15101051
ThenweidentifytherowswithC(n,r)wherethenisthesecondentryinanyrow,and
risthecolumnofthatrow,startingwith0:
C(l,0)C(lr1)
C(2,0)C(2Z1)C(2,2)
C(3Z0)C(3,l)C(3Z2)C(3,3)
C(4,0)C(4,l)C(4,2)C(4,3)C(4,4)
C(5,0)C(5,l)C(5,2)C(5,3)C(5,4)C(5,5)
Prodthestudentsalittle.Theywillseethataddinganytworowitemsgivesthevalue
directlyundertheseconditem.Thereistherecursionrelationtheyneed:
C(n,r)+C(n,r+l)=C(n+1,r+1)
Thisisanotherumbrellarecursion,similarinthisrespecttoProgrammingproblem#1.It
takesconsiderabletimeandspacetodothiswithrecursion.
Ifbinomialcoefficientsarereallyneeded,abunchofthemarelikelyneeded.Itisbetterto
useasolutionwhereallthecoefficientsuptothoseneededarecomputedandstored(in
someglobalarray,oritcouldbearrangedforthefunctiontoreturnacurrentlyavailable
value,orifitisnotavailable,tocomputeallbinomialcoefficientsuptotheonedesired.
(Thisisagoodplacefortheideasofa"dynamicarray"ora"source"class.)
5.RecursiveReverseArraySegment.
Theproblemistorecursivelyreverseanarraysegment.Thefunctiontakesanarray
argumentandtwointegerargumentsthatspecifythestartandtheendofthesegmentofthe
arraytobereversed.
voidrecursive_reverse(inta口,intstart,intend);
Thetaskissplitintotwopieces:
NonRecursive:Hereifthereisonlyoneelement,wearedoneoriftherearetwo
elements,wecanjustswapthem,andwearedone.
Recursive:Reversethestartandendelements.Arecursivecallismadetothe
functiontofinishthejob:
recursive_reverse(a,start+lzend-1);
Housekeeping:Howdoweknowifthereisonlyoneelement?Howdoweknow
wehaveonlytwoelements?
Ifthereisanoddnumberofarrayelementstobeswapped,wetakecareoftwoat
time.Wewindupwithonearrayelementforthenon-recursivecasetodealwith.
Thenwecantest
start==end.
Howdoyouknowthereareonlytwoelementstobeswapped?
Ifstart+1==end,thenthereonlytwoelements.Weswapthemandquit.
Recursivecase:
Ifthereisanevennumberofarrayelementstobeswapped,allofthemwillbe
dealtwithintherecursivecase.Therewillbeonelastrecursivecallmadewithan
arrayoftwoelements(start+1==end).Inthiscall,thislastpairwillbe
swapped.Therewillbeonelastrecursivecallwithstartargumentstart+1+1
andendargumentend-1.Thismakesthevaluesofstartandendinthe
nextrecursivecallhavevaluessuchthatstart<end.Thissignalsthatthelast
pairhavebeenswapped.
(Actually,thetwoelementsubcasecanberemoved.Theexplanationissomewhatmore
obscure.)
Code:
♦include<iostream>
voidrecursive_reverse(chara[],intstart,intend)
(
if(start>=end)//jobisdone!
return;
if(start+1==end)//onlytwoelements,swapthem
(
chartemp=a[start];
a[start]=a[end];
a[end]=temp;
return;
}
//makerecursivecalltofinish
//swapstartandendelements
chartemp=a[start];
a[start]=a[end];
a[end]=temp;//makerecursivecalltofinish
recursive_reverse(a,start+1,end-1);
)
intmain()
(
usingnamespacestd;
chara[20];
for(inti=0;i<20;i++)
a[i]=+i;
cout<<"array:"<<endl;
for(i=0;i<20;i++)
cout<<a[i]<<”H;
cout<<endl;
recursive_reverse(a,5,19);//endisanarrayelement
cout<<"arraywithelementswithindex5-19reversed"”;
for(i=0;i<20;i++)
cout<<a[i]<<”n;
cout<<endl;
for(i=0;i<20;i++)
a[i]=1A1+i;
cout<<"array:“<<endl;
for(i=0;i<20;i++)
cout<<a[i]<<"";
cout<<endl;
recursive_reverse(az3Z12);//endisanarrayelement
cout<<"arraywithelementswithindex3-12reversed\nf,;
for(i=0;i<20;i++)
cout<<a[i]<<”n;
cout<<endl;
)
ATrialrun:
array:
ABCDEFGH工JKLMNOPQRST
arraywithelementswithindex5-19reversed
ABCDETSRQPONMLKJIHGF
array:
ABCDEFGH工JKLMNOPQRST
arraywithelementswithindex3-12reversed
ABCMLKJIHGFEDNOPQRST
StringReverseII
Oncethefunctionaboveisfullydebugged,defineafunctionthattakesasingleargument
whichisanarraythatcontainsastringvalueandthatreversesthespellingofthestring
valueinthearrayargument.Thisfunctioncallstherecursivefunctionjustdefined.
♦include<iostream>
#include<cstring>
voidrecursive_reverse(chara[],intstart,intend);
voidstring_reverse(charstr[])
(
intlength=strlen(str);
recursive_reverse(str,0,length-1);
}
intmain()
{
usingnamespacestd;
chara[20];
for(inti=0;i<20;i++)
a[i]=1A1+i;
a[19]=,\01;//makeastringoutofit!
cout<<nstringbeforereversing:"<<a<<endl;
string__reverse(a);
cout<<nstringafterreversing:"<<a<<endl;
return0;
)
AtrialRun:
stringbeforereversing:ABCDEFGHIJKLMNOPQRS
stringafterreversing:SRQPONMLKJIHGFEDCBA
6.IterativeReverseCharArraySegment
//File:chl4prg6.cc
//Codeandtestaniterativeversionofreversesegmentfrom
//anarrayofchar.Thenwriteanotherfunctionthatcalls
this
//toandreversesastring.
//iterative_reverse:
//Swaptheends,backuponefromeachend,repeat
//whilestart<end.
♦include<iostream>
#include<cstring>
voiditerative_reverse(chara[],intstart,intend)
(
while(start<end)
(
chartemp=a[start];
a[start]=a[end];
a[end]=temp;
start+4-;
end——;
)
)
voidstring_reverse(charstr[])
intlength=strlen(str);
iterative_reverse(str,0,length-1);
)
constintSIZE=10;
intmain()
(
usingnamespacestd;
chara[SIZE];
for(intj=2;j<SIZE;j++)
(
for(inti=0;i<j;i++)
a[i]=1A*+i;
a[j-1]=1\01;//makeastringoutofit!
cout<<"stringbeforereversing:"<<a<<endl;
string_reverse(a);
cout<<"stringafterreversing:"<<a<<endl<<
endl;
}
return0;
}
Atypicalrun:
stringbeforereversing:A
stringafterreversing:A
stringbeforereversing:AB
stringafterreversing:BA
stringbeforereversing:ABC
stringafterreversing:CBA
stringbeforereversing:ABCD
stringafterreversing:DCBA
stringbeforereversing:ABCDE
stringafterreversing:EDCBA
stringbeforereversing:ABCDEF
stringafterreversing:FEDCBA
stringbeforereversing:ABCDEFG
stringafterreversing:GFEDCBA
stringbeforereversing:ABCDEFGH
stringafterreversing:HGFEDCBA
7.RecursiveSortintarray
ThiscodewasadaptedfromDisplay12-13.Thesortroutinewasrenderedrecursive.
Notethatthetext'swarningfromtheChapterSummarymustbetakentoheart.Itis
frequentlynecessarytodoasomewhatmoregeneralproblemthantheiterativecodesolves.
Here,Ihadtomaketherecursivesortroutinesortfromaspecifiedindex.Theindexisthe
positionthatthesortingstarts.Theforloopwasabletosetwiththeiterativecodebutitis
necessarytothispassintotherecursivesort.
//File:14-6.cc
//Teststheproceduresort.
♦include<iostream>
#include<cstdlib>
voidfill_array(inta[],intsize,int&number_used);
//Precondition:sizeisthedeclaredsizeofthearraya.
//Postcondition:number_usedisthenumberofvaluesstored
//ina[0]througha[number_used-1]havebeenfilledwith
//nonnegativeintegersreadfromthekeyboard.
voidsort(inta[],intstartrintnumber_used);
//Precondition:start<declaredsizeofarraya,
//number_used<=declaredsizeofthearraya.Thearray
//elementsa[start]througha[number_used-1]havevalues.
//Postcondition:Thevaluesofa[start]through
//a[number_used-1]havebeenrearrangedsothat
//a[start]<=a[start+1]<=.,・<=a[number_used-1].
voidswap_values(int&vl,int&v2);
//Swapsthevaluesofvlandv2.
intindex_of_smallest(constinta[]z
intstart_index,
intnumb㊀r_us㊀d);
//Precondition:0<=start_index<number_used.
//Referencedarrayelementshavevalues.
//Returnstheindexisuchthata[i]isthesmallestof
//thevaluesa[start_index],a[start_index+1],・・・,
//a[number_used-1].
intmain()
usingnamespacestd;
cout<<"Thisprogramsortsnumbersfrom”
<<nlowesttohighest.\nn;
intsample_array[10],number_used;
fill_array(sample_arrayz10,number__used);
sort(sample__arrayz0,number_used);
cout<<nInsortedorderthenumbersare:\nn;
for(intindex=0;index<number_used;index++)
cout<<sample_array[index]<<"n;
cout<<endl;
return0;
)
//Usesiostream.h:
voidfill_array(inta[]rintsize,int&number_used)
{
usingnamespacestd;
cout<<"Enterupto”<<size
<<”nonnegativewholenumbers.\nn
<<"Marktheendofthelistwitha”
<<nnegativenumber.\nH;
intnext,index=0;
cin>>next;
while((next>=0)&&(index<size))
a[index]=next;
index++;
cin>>next;
)
number_used=index;
}
//RecursiveInsertionSort:
//Placesmallestintothelowestposition,thenrecur.
//Sortsarrayfrominitialpositionindextoposition
//number_used-1
voidsort(inta[],intstart,intnumber_used)
(
intindex_of_next_smallest;
if(start<number_used-1)
{//Placethecorrectvalueina[start]:
index_of_next_smallest=
index_of__smallest(azstart,number_used);
swap__values(a[start],a[index__of_next_smallest]);
start++;
sort(azstart,numbereused);
//a[0]<=a[1]<=...<=a[start]arethesmallest
//oftheoriginalarrayelements.
)
)
voidswap__values(int&vl,int&v2)
inttemp;
temp=vl;
vl=v2;
v2=temp;
}
//Recursiveroutine
intindex_of_smallest(constinta[]zintstart_indexzint
number__used)
{
if(start_index==number_used-1)
returnstart_index;
intmin=a[start_index];
intindex_of_min=
index_of_smallest(a,start_index+l,number_used);
if(min>a[index_of_min])
returnindex_of_min;
else
returnstart_index;
}
8.TowersofHanoi
//ch9Prob7.cpp
//TowersofHanoi
♦include<iostream>
voidtowers(intcount,charsrc,chardestzcharspare)
usingstd::cout;usingstd::endl;
if(1==count)
cout<<"Moveadiskfrompost”<<src
<<"topost”<<dest<<endl;
else
(
towers(count-1,src,spare,dest);
towers(1,src,dest,spare);
towers(count-1,spare,dest,src);
)
)
intmain()
(
usingstd::cout;usingstd::endl;
usingstd::cin;
cout<<"TOWERSofHanoi"<<endl;
cout<<"Enteranumberofdiskstoplay.
<<”1111givenecessarymoves.\nn;
intnumber;
charA=1A1,B=C=;
cin>>number;
cout<<number<<endl;
towers(number,A,B,C);
return0;
)
Atypicalrun:
TOWERSofHanoi
Enteranumberofdiskstoplay.I!11givenecessarymoves.
3
MoveadiskfrompostAtopostB
MoveadiskfrompostAtopostc
MoveadiskfrompostBtopostc
MoveadiskfrompostAtopostB
MoveadiskfrompostCtopostA
MoveadiskfrompostCtopostB
MoveadiskfrompostAtopostB
//
***********************************************************************
//Chl4Proj9.cpp
//
//ThisprogramcalculatesarecursivesolutiontotheJumpIt!game.
//
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
#include<iostream>
usingnamespacestd;
//Functionprototyptes
intjumplt(intboard[]);
//============-------
//jumpit:
//Solvestheproblemrecursivelybythefollowing:
//Ifthecurrentpositionistheendoftheboardthen
//simplyreturnthevalueatboard[currentposition].
//Otherwise,returntheminimumofjumplt(currentPosition+1)and
//jumplt(currentPosition+2)+board[currentposition]
//====================
intjumplt(intboard[],intcurpositionzconstintboardsize)
(
if(curposition==boardsize-1)
(
returnboard[curposition];
)
elseif(curposition==boardsize)
//Ifwereachthiscasewetriedtojump
//pasttheend,whichisinvalid.
//Returnalargecostsowewon'tpickthis
//solution.
return99999999;
)
//Costifwemoveonepieceforward
intjumpl=jumpIt(board,curposition+1,boardsize);
//Costifwejumpthenextsquare
intjump2=jumplt(board,curposition+2zboardsize);
if(jump1<jump2)
returnjumpl+board[curposition];
else
returnjump2+board[curposition];
mainfunction
intmain()
(
intboard[]={0,3,80,6,57,10};
intboardsize=6;
n
cout<<Theoptimalsolutionhascostof”<<jumplt(board,0Aboardsize)
<<endl;
return0;
*****★★★************★★****★************★*****★*************★******★****
//Chl4ProjlO.cpp
//
//Thisprogramcalculatesarecursivesolutiontothenumberof
//chocolatebarswecangetifitcosts$l/barandeachbarhasa
//couponwhere7couponsgetsusanadditionalfreebar.
//
***********************************************************************
#include<iostream>
usingnamespacestd;
//Functionprototyptes
intcomputeBars(intdollars,intcoupons);
//
//computeBars:
//dollarsandcouponsistheinitialnumberofdollarsand
//couponswehave.
//Solvestheproblemrecursivelybythefollowing:
//ifdollars=0andcoupons<7return0
//bars=dollars(spendalldollarsonbars)
//coupons+=bars(newcouponsfromeachbarwejustgot)
//return(bars)+computeBars(coupons/7,coupons%7)
//
intcomputeBars(intdollars,intcoupons)
(
if((dollars==0)&&(coupons<7))
(
return0;
)
intbars=dollars;
coupons+=bars;
returnbars+computeBars(coupons/7Zcoupons%7);
)
//====================
//mainfunction
//====================
intmain()
(
intdollars;
intbars;
cout<<"Enternumberofdollarsyouwanttospendoncandybars.\nn;
cin>>dollars;
bars=computeBars(dollars,0);
cout<<"Youcanget”<<bars<<"barswith$"<<dollars<<*'.\nn;
return0;
11.
//*********************************************************************
//Chl4Projll.cpp
//
//Writearecursiveprogramthatgeneratesallthepermutationsofaset
//ofnumbers.
/I*********************************************************************
//FileName:permutations.cpp
//Author:
//EmailAddress:
//ProjectNumber:14.11
//Description:Recursivelyfindsallpermutationsofasetofintegers
//LastChanged:October13r2007
#include<vector>
#include<iostream>
usingnamespacestd;
//Nodestructureusedtocreateasimplelinkedlist
//ofvectors.Eachnode'svectorwillcontainaunique
//permutation.
structNode
(
vector<int>numbers;
Node*next;
);
typedefNode*NodePtr;
voidprint_permutations(intn);
//Usesthepermutationsfunctiontoprintallpermutationsof
//thefirstnwholenumbers
NodePtrpermut
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省济宁市金乡县2023-2024学年八年级下学期3月月考数学试卷(含解析)
- 木材加工项目投资测算分析报告
- 2024年吉林省四平市伊通满族自治县《高等数学(一)》(专升本)深度预测试题含解析
- 2024年义马市《高等数学(一)》(专升本)临考冲刺试卷含解析
- 货运安全员考试试题
- 无线路由引发的校园网DHCP冲突
- 药店员工劳务合同
- 浆砌片石工程分包合同
- 和你一样作文共九篇
- 噩耗传来的那一刻作文高分作文
- 彩超医疗诊断设备相关项目营销策略方案
- 中国防爆接线箱行业市场现状分析及竞争格局与投资发展研究报告2024-2029版
- 高分子化学智慧树知到期末考试答案2024年
- 人工智能在智能制造中的质量控制与生产优化
- 招投标书转轮除湿机方案概述技术标商务标标书样本样本
- 公差数值对照表
- 《认识隶书(一)》名师课件
- 大学生医院财务实习报告
- 尾矿库防汛应急救援演练方案2014.7.9
- 汽车以旧换新市场调研
- 钢筋混凝土浅圆仓滑模施工方案.doc
评论
0/150
提交评论