今天练习和复习了下面四道程序: 1)随机生成100个随机数。 ```

include

include

include

define random(x) rand()%(x)

using namespace std;

int main(){ srand((int)time(0)); for (int i=0;i<100;i++){ cout<
}

```

2)输入100个整数(上题的输出正好是这题的输入),用shell排序法输出正确的顺序。 ```

include

include

using namespace std; void ShellSort(int a[],int n){ for(int gap=n/2;gap>0;gap/=2){ for(int i=gap;i<n;++i){ int j=i; while(j-gap>=0 && a[j-gap]>a[j]) { a[j-gap] = a[j-gap]+a[j]; a[j] = a[j-gap]-a[j]; a[j-gap] = a[j-gap]-a[j]; j=j-gap; } } } for(int i=0;i<n;++i)cout<<a[i]<<" "; } int main(){ int a[100]; for(int i=0;i<100;i++) cin>>a[i]; ShellSort(a,100); return 0; } ```

3)使用至少两种方法完成“八皇后问题”。今晚介绍了两种,方法一:简单直接8个for循环;方法二:递归求解。详见下面代码。 程序1: ```

include

using namespace std; int total=0; bool check(int a[]){ for(int i=0;i<8;i++){ for(int j=i+1;j<8;j++){ if(a[i]==a[j]) return false; if(a[i]-a[j]==i-j||a[i]-a[j]==j-i) return false; } } return true; } void print(int a[]){ cout<<++total<<":"; for(int i=0;i<8;i++) cout<
for(int b2=0;b2<8;b2++){ a[2]=b2; for(int b3=0;b3<8;b3++){ a[3]=b3; for(int b4=0;b4<8;b4++){ a[4]=b4; for(int b5=0;b5<8;b5++){ a[5]=b5;
for(int b6=0;b6<8;b6++){ a[6]=b6; for(int b7=0;b7<8;b7++){ a[7]=b7; if(check(a)) print(a); } } } }
} } } } return 0; } ```

程序2: ```

include //八皇后问题递归方法

using namespace std; int total = 0; int a[8] = { -1,-1,-1,-1,-1,-1,-1,-1 }; bool check(int row, int col) { // 在row行,col列可以放置皇后吗? for (int i = 0; i < row; i++) // 判断同列、对角线是否有皇后冲突 if (a[i] == col || row - i == col - a[i] || row - i == a[i] - col) return false; // 返回0表示不能放,有冲突 return true; } void find(int n) { if (n == 8) { // 递归函数的出口,从0到7行都已经放置完毕, total++; // 并且都是正确的,所以当n=8的时候,方案数加1 cout<
} } int main() { find(0); return 0; } ```