631数组与数组元素 include <iostream> using namespace std; include <cstdlib> const size=15; void maino int arr[size; int i, high,low; for(i=0;i<size; i++) arr[i]=rando%o100; cout <<Here are the <<size<< roundom numbers :<<endli for(i=O;i<size;i++) cout<<arr[]<<t cout<<end: high=arr[o];//初始化时认为最大和最小值均为数组的第一个元素 low=arr[o]; for (i=1; i<size; i++) if(arr[i]>high) high=arr[i]; if(arr[i]<low) low=arr[i]i cout<< highest value is"<<high<<endi cout<< lowest value is"<<low<<endl; returni D
6.3.1 数组与数组元素 #include <iostream> using namespace std; #include <cstdlib> const size=15; void main() { int arr[size]; int i,high,low; for (i=0;i<size;i++) arr[i]=rand()%100; cout << "Here are the " <<size<<" roundom numbers :"<<endl; for (i=0;i<size;i++) cout<<arr[i]<<'\t'; cout<<endl; high=arr[0]; //初始化时认为最大和最小值均为数组的第一个元素 low=arr[0]; for(i=1;i<size;i++) { if(arr[i]>high) high=arr[i]; if(arr[i]<low) low=arr[i]; } cout<<"highest value is "<<high<<endl; cout<<"lowest value is "<<low<<endl; return; }
631数组与飘组元素 【例64】八皇后问题:在8×8的国际象棋棋盘上安放八个皇后,为 避免她们之间相互攻击,要求没有任何两个皇后在棋盘的同一行、同 列及在同一对角线上。图64是八皇后问题的一个解。八皇后在棋 盘上可能有的布局数是:C6=64!/(8!×56!)=4426165368种, 用回溯法解决八皇后问题显然是合适的。 首先要求没有任何两个皇后在棋盘的同一行则可每一行安置 个皇后,第i个皇后被安置在第行上。可用数组 queen[8]中的每 个数组元素记录一个皇后所在位置的列号,在安置的过程中只需考虑 每两个皇后不在同一列和同一对角线的问题。很明显第行皇后和第j 行皇后在同一列的充要条件是: queen[]=queen[] 第i皇后和第j行皇后在同一对角线的充要条件是: queen[i]-queen[]=i-j D
6.3.1 数组与数组元素 【例6.4】八皇后问题:在8×8的国际象棋棋盘上安放八个皇后,为 避免她们之间相互攻击,要求没有任何两个皇后在棋盘的同一行、同 一列及在同一对角线上。图6.4是八皇后问题的一个解。八皇后在棋 盘上可能有的布局数是:C8 64=64!/(8!×56!)=4426165368种, 用回溯法解决八皇后问题显然是合适的。 首先要求没有任何两个皇后在棋盘的同一行,则可每一行安置一 个皇后,第i 个皇后被安置在第i行上。可用数组queen[8] 中的每一 个数组元素记录一个皇后所在位置的列号,在安置的过程中只需考虑 每两个皇后不在同一列和同一对角线的问题。很明显第i行皇后和第j 行皇后在同一列的充要条件是: queen[i]=queen[j] 第i行皇后和第j行皇后在同一对角线的充要条件是: queen[i]-queen[j]=│i-j│
631数组与飘组元素 初始时将每一行的皇后都放在第0列(即下标为0的列),以第0行皇 后开始向下试探。设前i-1行的皇后已经安排得互不攻击,安排第i的皇后 使之与前i-1行皇后也互不攻击,可从第i皇后的当前位置开始向棋盘的右 部搜索: 1.若 queen[<8,检查第行皇后是否与前ⅰ-1行皇后已经安排得互不攻 击。无攻击将安排下一行(第计+1行)皇后的位置;否则将该皇后向棋盘的右 部移一列,重新进行这个过程。 2.若 queen[订>=8,说明在前i-1行皇后的当前布局下,第i行皇后已经无 法安置。为此将第i的皇后回归到该行的开始列,回溯一行,考虑第i-1行 皇后与前面的2个皇后都互不攻击的下一位置。如果已回溯到i小于零的行, 程序结束。 3.若当前安排好的皇后是在最后一行,说明已找到八个皇后互不攻击的一种 布局,将这种布局输出。然后将最后一个皇后右移一列,重新进行这个过程, 以便找出下一种布局。 程序Ex64cpp D
6.3.1 数组与数组元素 初始时将每一行的皇后都放在第0列(即下标为0的列), 以第0行皇 后开始向下试探。设前 i-1 行的皇后已经安排得互不攻击,安排第i行的皇后, 使之与前 i-1 行皇后也互不攻击,可从第i行皇后的当前位置开始向棋盘的右 部搜索: 1. 若queen[i] < 8,检查第i行皇后是否与前 i-1 行皇后已经安排得互不攻 击。无攻击将安排下一行(第i+1行)皇后的位置;否则将该皇后向棋盘的右 部移一列,重新进行这个过程。 2. 若queen[i] >=8,说明在前 i-1 行皇后的当前布局下,第i行皇后已经无 法安置。为此将第i行的皇后回归到该行的开始列,回溯一行,考虑第i-1行 皇后与前面的i-2个皇后都互不攻击的下一位置。如果已回溯到i小于零的行, 程序结束。 3. 若当前安排好的皇后是在最后一行, 说明已找到八个皇后互不攻击的一种 布局,将这种布局输出。然后将最后一个皇后右移一列,重新进行这个过程, 以便找出下一种布局。 程序 Ex6_4.cpp
632数组名、指针和指针遁算 我们已经讨论了指针与数组名的关系,数组名是指 针常量,普通指针能进行更灵活的数组访问。通常把 数组名赋给一个同类型(指向数组元素)的指针,由该 指针来完成相关操作 【例65】指针与数组相关的运算 程序EX65cpp 最后再次强调数组名是指针常量。 D
6.3.2 数组名、指针和指针运算 我们已经讨论了指针与数组名的关系,数组名是指 针常量,普通指针能进行更灵活的数组访问。通常把 数组名赋给一个同类型(指向数组元素)的指针,由该 指针来完成相关操作。 【例6.5】指针与数组相关的运算 最后再次强调数组名是指针常量。 程序 Ex6_5.cpp
632数组名、指针和指针遁算 include <iostream.h> void minot inti, fubon[10]={0112358132134}*pfb1*pfb2 pfb1=pfb2=fbon//也可以用pfb1=pfb2=&fbon[0] cout<<"使用数组显示斐波那契数列"<<endl for(i=0;i<10;i++) cout<<fibon[i]<<'it'<<pfibl[]<<endl; cout<<"使用指针显示斐波那契数列"<<endl for(i=0;i<10i++) cout<<*fbon+)<<"\<<*pfib2++<<en山//注意:fbon++是错误的, 而pfb2++是正确的 cout<<"显示指针相减应为数组长度:"; cout<<pfb2-pfb1<<end//pfib2已指向数组末尾 D
6.3.2 数组名、指针和指针运算 #include <iostream.h> void main(){ int i,fibon[10]={0,1,1,2,3,5,8,13,21,34},*pfib1,*pfib2; pfib1=pfib2=fibon;//也可以用pfib1=pfib2=&fibon[0] cout<<"使用数组显示斐波那契数列"<<endl; for(i=0;i<10;i++) cout<<fibon[i]<<'\t'<<pfib1[i]<<endl; cout<<"使用指针显示斐波那契数列"<<endl; for(i=0;i<10;i++) cout<<*(fibon+i)<<'\t'<<*pfib2++<<endl;//注意:fibon++是错误的, 而pfib2++是正确的 cout<<"显示指针相减,应为数组长度:"; cout<<pfib2-pfib1<<endl;//pfib2已指向数组末尾 }