您的位置:首页 > 其它

方格填数-用next_permutation()全排列函数做的

2017-04-10 10:28 405 查看

方格填数

如图,如下的10个格子,填入0~9的数字。要求:连续的两个数字不能相邻。

(左右、上下、对角都算相邻)一共有多少种可能的填数方案?

请填写表示方案数目的整数。



一个错误把另一个错误掩盖了,这是很大的问题 ,写程序一定要细致

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
int a[10]={0,1,2,3,4,6,5,7,8,9};
int sum=0;
sort(a,a+10);
do{

if( abs(a[0]-a[1])!=1 && abs(a[0]-a[4])!=1 && abs(a[0]-a[5])!=1 && abs(a[0]-a[3])!=1
&& abs(a[1]-a[2])!=1 && abs(a[1]-a[5])!=1 && abs(a[1]-a[4])!=1 && abs(a[1]-a[6])!=1
&& abs(a[2]-a[5])!=1 && abs(a[2]-a[6])!=1
&& abs(a[3]-a[4])!=1 && abs(a[3]-a[7])!=1 && abs(a[3]-a[8])!=1
&& abs(a[4]-a[5])!=1 && abs(a[4]-a[9])!=1 && abs(a[4]-a[7])!=1 && abs(a[4]-a[8])!=1
&& abs(a[5]-a[6])!=1 && abs(a[5]-a[8])!=1 && abs(a[5]-a[9])!=1//一个错误把另一个错误掩盖了,这是很大的问题 , 之前写成了abs(a[6]-a[9])!=1
&& abs(a[6]-a[9])!=1
&& abs(a[7]-a[8])!=1
&& abs(a[8]-a[9])!=1
)
{
sum++;
}

/*
int i;
for(i=0;i<5;i++)
{
cout<<a[i]<<" ";

}
cout<<endl;
*/
//sum++;

}while(next_permutation(a,a+10));

cout<<sum;
return 0;
}


有冗余判断:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
int a[10]={0,1,2,3,4,6,5,7,8,9};
int sum=0;
sort(a,a+10);
do{

if( abs(a[0]-a[1])!=1 && abs(a[0]-a[4])!=1 && abs(a[0]-a[5])!=1 && abs(a[0]-a[3])!=1
&& abs(a[1]-a[0])!=1 && abs(a[1]-a[2])!=1 && abs(a[1]-a[5])!=1 && abs(a[1]-a[4])!=1 && abs(a[1]-a[6])!=1
&& abs(a[2]-a[1])!=1 && abs(a[2]-a[5])!=1 && abs(a[2]-a[6])!=1
&& abs(a[3]-a[0])!=1 && abs(a[3]-a[4])!=1 && abs(a[3]-a[7])!=1 && abs(a[3]-a[8])!=1
&& abs(a[4]-a[1])!=1 && abs(a[4]-a[1])!=1 && abs(a[4]-a[3])!=1 && abs(a[4]-a[5])!=1 && abs(a[4]-a[9])!=1 && abs(a[4]-a[7])!=1 && abs(a[4]-a[8])!=1
&& abs(a[5]-a[0])!=1 && abs(a[5]-a[1])!=1 && abs(a[5]-a[2])!=1 && abs(a[5]-a[4])!=1 && abs(a[5]-a[6])!=1 && abs(a[5]-a[8])!=1 && abs(a[5]-a[9])!=1
&& abs(a[6]-a[9])!=1 && abs(a[6]-a[1])!=1 && abs(a[6]-a[2])!=1 && abs(a[6]-a[5])!=1
&& abs(a[7]-a[8])!=1 && abs(a[7]-a[3])!=1 && abs(a[7]-a[4])!=1
&& abs(a[8]-a[9])!=1 && abs(a[8]-a[3])!=1 && abs(a[8]-a[4])!=1 && abs(a[8]-a[5])!=1 && abs(a[8]-a[7])!=1
&& abs(a[9]-a[4])!=1 && abs(a[9]-a[5])!=1 && abs(a[9]-a[6])!=1 && abs(a[9]-a[8])!=1
)
{
sum++;
}

/*
int i;
for(i=0;i<5;i++)
{
cout<<a[i]<<" ";

}
cout<<endl;
*/
//sum++;

}while(next_permutation(a,a+10));

cout<<sum;
return 0;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝桥杯 方格填数