|
8#
楼主 |
发表于 2020-2-29 20:08:36
|
只看该作者
第六题:多了一个约束条件,我们多加一个判断,abs(a(i)-k)<4,但是要特殊考虑第一个数,他前面没有,所以他不用判断。
for (int k=1;k<=8;k++)
{
b1=(i==1); //是不是第一个数
b2=(abs(k-a(i-1))<4) ;
if ((b1|| b2) && (b[k]==1)) {****}
}
- #include <iostream>
- #include <cmath>
- using namespace std;
- int a[10];///选后的数
- int b[]= {0,1,1,1,1,1,1,1,1,1}; ///整数数组表示选择情况
- void pr() /// 输出
- {
- for (int i=1; i<=8; i++) cout<<a[i];
- cout<<endl;
- }
- void pmn(int i) /// 选择第i个数
- {
- ///已经选择了3个数
- if (i>8) pr();
- else
- for (int k=1; k<=8; k++) /// 4种可能
- {
- bool b1=(i==1);
- bool b2=(abs(k-a[i-1])<4);
- bool b3=b[k]>0;
- if (b1||b2 && b3) ///还有可以的选择
- {
- a[i]=k; // 选择它
- b[k]--; ///次数减1
- pmn(i+1); /// 选下一个数
- b[k]++; ////!!!! 这个数还回来!
- }
- }
- }
- int main()
- {
- pmn(1);
- return 0;
- }
复制代码 答案是 1042 个
|
|