2015蓝桥杯五星填数(C++C组)

题目:五星填数



如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。


如图就是恰当的填法。


请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。


请提交表示方案数目的整数,不要填写任何其它内容。


代码:

#include<iostream>


using namespace std;


int data[10] = {1,2,3,4,5,6,8,9,10,12};
int a[10];


bool jud();
int ways();


int main(int argc,char** argv){

cout << ways();
}


bool jud(){

int s1 = a[1] + a[2] + a[3] + a[4];
int s2 = a[4] + a[6] + a[7] + a[8];
int s3 = a[8] + a[5] + a[2] + a[0];
int s4 = a[0] + a[3] + a[6] + a[9];
int s5 = a[9] + a[7] + a[5] + a[1];

if(s1 == 24 && s2 == 24 && s3 == 24 && s4 == 24 && s5 == 24){

return true;
}

return false;
}


bool jud_temp(){

int a1 = 0,a2 = 0,a3 = 0,a4 = 0,a5 = 0,a6 = 0,a7 = 0,a8 = 0,a9 = 0,a10 = 0;

for(int i = 0;i < 10;i++){

if(a[i] == 1){

a1 = 1;

}else if(a[i] == 2){

a2 = 1;

}else if(a[i] == 3){

a3 = 1;

}else if(a[i] == 4){

a4 = 1;

}else if(a[i] == 5){

a5 = 1;

}else if(a[i] == 6){

a6 = 1;

}else if(a[i] == 8){

a7 = 1;

}else if(a[i] == 9){

a8 = 1;

}else if(a[i] == 10){

a9 = 1;

}else if(a[i] == 12){

a10 = 1;

}
}

if(a1 == 0 || a2 == 0 || a3 == 0 || a4 == 0 || a5 == 0 || a6 == 0 || a7 == 0 || a8 == 0 || a9 ==0 || a10 == 0){

return false;

}else{

return true;
}
}


int ways(){

int nums = 0;

for(int a1 = 0;a1 < 10;a1++){

for(int a2 = 0;a2 < 10;a2++){

for(int a3 = 0;a3 < 10;a3++){

for(int a4 = 0;a4 < 10;a4++){

for(int a5 = 0;a5 < 10;a5++){

for(int a6 = 0;a6 < 10;a6++){

for(int a7 = 0;a7 < 10;a7++){

for(int a8 = 0;a8 < 10;a8++){

for(int a9 = 0;a9 < 10;a9++){

for(int a10 = 0;a10 < 10;a10++){

a[0] = data[a1];
a[1] = data[a2];
a[2] = data[a3];
a[3] = data[a4];
a[4] = data[a5];
a[5] = data[a6];
a[6] = data[a7];
a[7] = data[a8];
a[8] = data[a9];
a[9] = data[a10];

if(jud_temp()){

if(jud()){

nums++;
}
}
}
}
}
}
}
}
}
}
}
}

return nums;

}



posted @ 2018-03-31 23:06  IT蓝月  阅读(198)  评论(0编辑  收藏  举报
Live2D