編程計(jì)概選與排序問(wèn)題的解題思路_第1頁(yè)
編程計(jì)概選與排序問(wèn)題的解題思路_第2頁(yè)
編程計(jì)概選與排序問(wèn)題的解題思路_第3頁(yè)
編程計(jì)概選與排序問(wèn)題的解題思路_第4頁(yè)
編程計(jì)概選與排序問(wèn)題的解題思路_第5頁(yè)
已閱讀5頁(yè),還剩88頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第5章數(shù)據(jù)組選與排序問(wèn)題的解題思數(shù)組的定典型的數(shù)組操2成千上萬(wàn)只羊,不可能用一般變量來(lái)記3 a[10];

數(shù)組名[常量表達(dá)式]14930a[0]a[1]a[2]a[3]a[4]a[5]a[6]

a[7] a[8]a[9]下標(biāo)是i-14 a[0]=a[5]+a[7]-a[2*a[i]=a[i]+a[a[05intintia[100];//不要寫成intfor(i=0;i<=99;012012 9798for(i=99;i>=0;i--)cout<<a[i];99989998 21}6intint{intsize=50;inta[size]; constintsize=int{inta[size]; 114930

1.int2.a[-2]=3.a[200]=4.a[10]=5.intm= 一維數(shù)組的定義▲a[-2]就代表位于地址a2)*size(int)a-8a[-25,就是往地址a–8處寫入數(shù)值5這種情況,程序執(zhí)行到語(yǔ)句2就會(huì)立即出錯(cuò)。a[-2]=5是不 的數(shù)組元素并不在數(shù)組 intintint比使用的元 一 [例21234100 6 sum=sum+i sum[i]sum[i1i;(保留中間結(jié)果的情況)intsum[101sum[0]=0;(注意數(shù)組邊界)for(i=1;i<=100i++)sum[i]=sum[i-1]+[例31234567891

只需循環(huán)到一半,kn/2;for(i=0,j=n-1;i<=k;i++,j--{t=a[i];a[i]=a[j];a[j]=}int{inta[]={0,1,2,3,4,5,6,7,8,9,10,11,inti,j,//數(shù)組總長(zhǎng)度除以整數(shù)的長(zhǎng)度是元素的個(gè)intn=sizeof(a)/ij標(biāo)沒(méi)有交叉則繼續(xù)交換,節(jié)省計(jì)算for(i=0,j=n-1;i<j;i++,j--{t=a[i];a[i]=a[j];a[j]=}for(i=0;i<n;cout<<setw(3)<<return}Fibonacci1123581321f[01f[1循環(huán)體:f[i]f[i2f[i循環(huán)控制(forinti2i20int{intf[20]={1,for(inti=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(inti=0;i<20;{if(i%5==coutendlcout<<setw(12)<<}return} 程序框bigsheep for(i=0;i<10;i=i+1i鍵入第i只羊的重量sheep[i]bigsheep< bigsheep=bigsheepNo= int{ bigsheep=0.0;int for(i =0; <10;{

//數(shù)//浮點(diǎn)類型變量,存放最肥羊的重//用于記錄最肥羊的編// 循環(huán),開cout<“請(qǐng)輸入第 +1<“只羊的重量”;cin>sheep[i];if (sheep[i]>{

//輸入第i羊的重//浮點(diǎn)數(shù)判斷大小可直接用關(guān)系符bigsheep=sheep[i];bigsheepNo=i;}

//讓第i羊?yàn)楫?dāng)前最肥//記錄第i羊的編 //循環(huán)結(jié)

“最肥的羊的重量是:”bigsheependl;//輸出重量bighpo;//輸出編號(hào)retuern0; 101203994124333519(找4的位置i=0;while(i<&&a[i]!=num&&i<int{inta[10],for(inti=0;i<10;i++)cin>>a[i];cout“輸入被查找的數(shù)endl;cin>>num;i=while(a[i]!=num&&i<10)if(i<=couticout

whilewhile(i<{if(a[i]==num)}}如果找到了,i就是插入的位置,如果沒(méi)找到,ii=0;num=如果找到了,i就是插入的位置,如果沒(méi)找到,i{

35798if(num<=a[i])}1234561111234567for( =0; =

a[ +1]=a[i]for(i=6;i>=0;i--)a[i+1]=123456712345671234534567for(i=n-1;1234534567d f’ for(i=s;i<=f;a[i-d]=98542085942085429085420685420

333337

第次 a[0]和a[1]比 a[1]和a[2]比第j第j次 a[j]和a[j+1]比f(wàn)or(j =0;j <n-1;j++)if (a[j] >a[j +1]) =a[j]a[j] =a[j +1];a[j +1]=temp;}n-1次)for( =0; <n–1-

;j++)i (a[j >a[ +1])

i<n1和i<=n =a[j]a[j]=a[j +1];a[j1]=temp;}將一個(gè)最大的放到最

j<n–1-intmain(){inta[10]={9,8,5,4,2,0,6,1,3,inti,j,temp,n=for(i0;in1i++)//n個(gè)元素,只要冒n-1for(j=0;j<n–1-i;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}for(i=0;i<9;i++)cout<<a[i]<<“”;return0;}p=1;for(j =1+1;j <p=1;for(j =1+1;j <10;j++)if (a[p][j])p=j=a[p];a[p]=a[1];a[1]=temp;790564238p790564238p970564238p970564238p980564237p

p=ifor(j =i +1;j <n;j++)if (a[p]<a[j])p=j; =a[p];a[p]=a[i];a[i =int{inta[10]={3,7,0,9,8,5,4,2,6,inti,j,temp,n=10,for(i=0;i<n-1;{p=for(j=i+1;j<n;j++)if(a[p]<a[j])p=temp=a[p];a[p]=a[i];a[i]=}for(i=0;i<10;cout<<a[i];return0;} int{inta[21],p,cout20個(gè)整數(shù)endl;for(inti=0;i<20;i++)cin>>for(inti=0;i<19;for(intj=0;j<19-i;j++)if(a[j]>a[j+1])

{intt=a[j];a[j]=a[j+1];a[j+1]=t;cout<<“輸入 入的數(shù)”<<cin>>num;p=0;whilea[p]num&&p20)p++;//查找for(intk=19;k>=p;k--a[k+1]=a[p]=

for(inti=0;i<21;cout<<setw(4)<<a[i];return0;}

3、如果用if語(yǔ)句,需要判斷50次?if(n==1)count[1]++;if(n==2)for(i=1;i<=1000;{cin>>num;{case1:case2:count[2]++;break;case3:count[3]++;break;….

for(i=1;i<=1000;{cin>>for(j=1;j<=50;if(num==j) m=1cnt[1]++m=2cnt[2]++m=50

int{intcnt[510intfor(inti=0;i<1000;{cin>>}for(inti=1;i<=50;cout<<setw(4)<<cnt[i];cout<<endl;return} 定義數(shù)組思路組,計(jì)數(shù)為1 0

34567

9

111213

15 當(dāng)m<a[k]

當(dāng)m>a[k] a[k]=b>e注意注意:k是全局的下標(biāo)值,(e b)/2+ba[k]!=a[k]!=m&b=k=b+(e-b)/b=k+e=k-nya[k]>int

intk,num,b=0,e=inta[15]={1,3,5,7,9,11,13,15,17,19,21,23,25,27,cin>>num;k=(e-b)/2;while(num!=a[k]&&b<=e){if(a[k]>num) {e=k-1;} {b=k+1;}k=b+(e–b)/2;}if(num==a[k]) cout<<"pos=“<<k+1<<endl;cout<<"notfound“<<endl;return0;}for(inti=0;i<m;for(intj=0;j<n;if(x[i]+y[j]==cout<<i<<““<<j<<先將數(shù)組xcm*log2m,c是一個(gè)常數(shù)for(inti=0;i<n;i++)//取y中每個(gè)元素for(b=0,e<m;b<= intmiddle=b+(e-b)/if(x[middle]+y[i]==

//只要條件滿足 cout<<middle<<“”<<i<<endl;i=5;break;if((x[middle]+y[i])>讓i5終止了外城循環(huán)i=5;要在break之前e=middle讓i5終止了外城循環(huán)i=5;要在break之前b=middle+總共執(zhí)行了(cm+n)log2m,dangm,n足夠大時(shí),效率高于f[5]={1,3,5,7,9},g[5]={2,3,4,7, 1357921357923478inti=j=0,cnt=0;while(i<5&&j<5)if(f[i]<={j++;cnt+=5–i;cout<<cnt<<

計(jì)算方T(n)的同數(shù)量級(jí)有以下:1,log2n,n,nlog2nn3,2n,n!找出后,f(n數(shù)量T(n)/f(n極限可得到一常數(shù)c,則時(shí)間復(fù)雜度T(n)=O(f(n))for(i=1;i<=n;++i)for(j=1;j<=n;++j) c[i][j] n2for(k=1;k<=n;c[i][ja[i][k*b[k][j]//該步驟屬于基本操作行次數(shù)}T(nn2n3,根據(jù)上面括號(hào)里的同數(shù)量級(jí),我們可以確定n3為T(n)的同數(shù)量級(jí)。f(n)n3T(n)/f(n)則該算法的時(shí)間復(fù)雜度:T(nO(n^3)n^3即是n的3程序執(zhí)行時(shí)除了需要空間和本身所使用的指令、常單元和一些為現(xiàn)實(shí)計(jì)算所需信息的輔助空間。兩部分:。41232

例子輸2.00000 0 34 67001220012230000235532000200110000000000 例如:doublea[0][0]...a[1][0]...a[2][0]...

doublea[3][4doublea[0]--a[0][0]a[0][1]a[0][2]aa[1]--a[1][0]a[1][1]a[1][2]a[2]--a[2][0]a[2][1]a[2][2]二維數(shù)組的定 如:doublea[2][3][4234共有24 doublea[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[3][0]a[3][1]a[3][2]doublea[100][100][100]有1,000,000int面,行,列

a[0][1][0]

1100500900int int110000011intintinta[][4]={1,2,3,4,5,6,7,8,9,10,11,inta[3][4]={{0,0,3},{},{0,intfor(i=0;i<3;i++)for(j=0;j<4;j++)a[i][j]=i*4+(j+1)for(i=0;i<12;i++)a[i/4][i%4]=i+1;a 1245

b for(i=0;i<3;i++)for(j=0;j<2;for(i=0;i<3;i++)for(j=0;j<2;j++)b[i][j]=a[b[j][i]=2x=a[0]0]fori =0 to2for = to a[i][j > column=j;row=i;x=a[i][j];輸出maxint{inta[3][4],i,j,row,column,max;max=a[0][0];for(i0i3i++//遍歷數(shù)for(j=0;j<4;j++)if(a[i][j]>max){max=a[i][j];row=i;column=cout<<“最大元素是”<<max<<“位于row1column<<“列”<<}return}— 160023004000750024002400750063007200590059006000300029003100270027003500 fori0i3i+{for(j0j7j+dis[i]=dis[i]+a[i][j];cost[i]=dis[i]*price[i];}int{intdis[3]={0,0,doubleprice[3]={20,inta[3][7]={inttotal=0,i,for(i=0;i<3;{for(j=0;j<7;j++)dis[i]=dis[i]+a[i][j];total=total+dis[i]*}cout“totalendl;return0;}C++通常把字符數(shù)組當(dāng)char0charc1[5]={‘c’‘h’‘a(chǎn)’‘r’‘\0’};charc2[4]={‘c’‘h’‘a(chǎn)’‘r’字符數(shù)組,不是字符charc[]={“char”};直接用字符串形式賦值,是字符以字符串形式給數(shù)組賦值時(shí),末尾自動(dòng)系統(tǒng)對(duì)字符數(shù)組操作動(dòng)判斷 charstr1“”},str2[20];str2str1;(在語(yǔ)法上是錯(cuò)誤的)charc1=‘A’;c2=a[0]=‘C’;a[1]=‘h’,a[2]=‘i’;a[3]=‘n’;a[4]=charhowarehow cin.getline(數(shù)組名size代表要輸入的字符串的最大長(zhǎng)度,包括sizsizsiz例:charstr[15最多14個(gè)字符,最后一個(gè)是輸入為Howareyou?則全部保存到str中輸入為howareyou,dai?,則howareyou,da保存起100200Thisis astring.\ncin>>100200Thisis astring.\n量。str中保存地方是“Thisis astring.\0”如果緩沖區(qū)中只有一個(gè)‘\ncin.getline此時(shí)的str是一個(gè)空串,只有一個(gè)結(jié)束符abcdecin>>str1>> str[30]=“thisisainterestingcout<<str<<endl;cout<<str[5]<<endl;cout<<str+5<<endl;interesting

//輸出“isainteresting第一,需要知道起始位置p,第二,需要知道長(zhǎng)度f(wàn)or(inti=0;i<count; cout<<#include<iostream>#include<cstring>usingnamespacestd;intmain(){charstr1[20],str2[20];cin.getline(str1,20);strcpy(str2,str1);coutstr1endlcout<<str2<<endl;return0; 字符數(shù)組舉Thisisabook.for(i=0;Thisisabook.{處理;}if(str[i]==‘Z’)ifif(str[i]==‘

int{charstr[20]; cin.getline(str,20); for(inti=0;str[i]!='\0';i++){if str[i]='A';if str[i]='a';if(str[i]=='')}coutstrendl//輸出字符串,只需寫名字return0;}面。(注:不使用系統(tǒng)函數(shù)strcat)charstr1[41],str2[41];為拼接留出富余空間for(len1=0;str1[len1]!=‘\0’;len1++);for(len2=0;str2[len2]!=‘\0’;for(len2=0;str2[len2]!=‘\0’;len2++)str1[len1++]=str2[len2];int{intlen1,len2;charstr1[41],str2[41];//20+20+\0cin.getline(str1,21);cin.getline(str2,21);for(len1=0;str1[len1]!='\0';len1++);for(len2=0;str2[len2]!='\0';len2++);if(len1>=len2){for(len2=0;str2[len2]!=‘\0’,len2++;)str1[len1++]=str2[len2];str1[len1]=}{for(len1=0;str2[len1]!=‘\0’;len1++)str2[len2++]=str1[len1];str2[len2]=}cout<<str1<<endl;cout<<str2<<return flag=0,輸入字符串該字符!=‘\0' c= '? flag=

flag=flag=1int{charinti,num=0,flag=0;cin.getline(str,80);for(i=0;str[i]!=’\0’;if(str[i]==‘’)flag=0;if(flag=={flag=1;

flag=0,m=該字符!='\0'flag= c=flag=yflag=flag=1輸出cout“字符串中有”num“個(gè)單詞<<endl;return0;字符串操charstr1[20]=“ ”str2[20];strcpy(str2,str1);字符串intlen1=strlen(str1);求長(zhǎng)度(不包含\0)strinstinginude<sring>定義一個(gè)字符串的對(duì)stringmystr;//可以不指定長(zhǎng)度char可以在定義時(shí)初始stringmystr=“ o”;類比charmystr[100]=“ stringmystr(80,‘類比charmystr[80];memset(mystr,’’,80); stringcin int stringname,school,F ="C++,ofcourse";cout<<"pleaseenteryourname:"<<endl;getline(cin,name);cout<<"pleaseenteryourschool"<<endl;getline(cin,school);cout<<"\nName:"<<<<"\nSchool:"<<<<"\nFavoritelanguage:"<< <<returnstringmystr1=intlen1=charmystr[]=intlen2=strlen(mystr)

chars1[100],s2[100];strings1,

if(strcmp(s1,cout<<“s1islargerthangetline(cin,getline(cin,

if(s1>cout<<“s1islargerthan =,assign inserterase() at>>,getline()//從 copy()c_strC_stringbeginendSTLrbeginrendstring用strings;constchar*c="OutThere";s.assign(c);stringconstchar*c="OutThere";s.assign(c,3);

//s=”O(jiān)ut//strings1( o"),s2("Wide"),s3("World"s1.assign(s2);s1=s3;

////strings1(" o"),s2("WideWorld");s1.append(s2,5,5

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論