寒假作业(蓝桥杯2016年省赛C++A组第6题 )

题目:

注:蓝桥杯2016年省赛C++A组第6题

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

题解:

由题可知这是一道全排列问题,因此我们可以使用c++的next_permutation函数对于1-13的数字进行全排列即可,并每次排列判断是否满足题意。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

代码:

方法1(c++):

cpp 复制代码
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
	int ans = 0;
	int a[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};//由于本身就是一种排列方式,所以先判断,所以使用do-while循环
	do{
		if(a[0]+a[1]==a[2]&&a[3]-a[4]==a[5]&&a[6]*a[7]==a[8]&&a[9]%a[10]==0         &&a[9]/a[10]==a[11])
			 ans++;
	}
    while(next_permutation(a,a+13));//开始为从小到大排列,因此此时可以输出全排列
	cout<<ans<<endl;
	return 0;
}

方法2(c++):

cpp 复制代码
#include<iostream>
using namespace std;
int   a[14],vis[14],cnt = 0;
void dfs( int x  ){
	 if( x == 12 ){ 
	     cnt++;  
	     return ;
	 }
	 if( x == 2 ){
	 	 a[2] = a[1] + a[0] ;
		 if( a[2] <= 13 && a[2] >=1  && !vis[ a[2] ] ){
		 	 vis[ a[2] ] = 1;
		 	 dfs(  x + 1 );
		 	 vis[ a[2] ] = 0;
		 }
		 else return ;  
      }
	 else if( x == 5 ){
	 	 a[5] = a[3] - a[4];
	 	 if( a[5] <= 13 && a[5] >=1  && !vis[ a[5] ] ){
		 	 vis[ a[5] ] = 1;
		 	 dfs(  x + 1 );
		 	 vis[ a[5] ] = 0;
		 }
		 else return ;  
	 }   
	 else if( x == 8 ){
	 	a[8] = a[6] * a[7];
	 	 if( a[8] <= 13 && a[8] >=1  && !vis[ a[8] ] ){
		 	 vis[ a[8] ] = 1;
		 	 dfs(  x + 1 );
		 	 vis[ a[8] ] = 0;
		 }
		 else return ;
	 } 
	 else if( x == 11 ){
	 	 if( a[9] % a[10]== 0 )
	 	     a[11] = a[9] /a[10];
	     else return ;
	     
	      if( a[11] <= 13 && a[11] >=1  && !vis[ a[11] ] ){
		 	 vis[ a[11] ] = 1;
		 	 dfs(  x + 1 );
		 	 vis[ a[11] ] = 0;
		 }
		 else return ;
	     
	 }
	 else {
           for( int i= 1;i<=13;i++){
             if( !vis[i] ){
	 	  	  vis[i] = 1; 
			  a[x] = i;
	 	      dfs( x + 1 );
			  vis[i] = 0;  	   
		     }
	 	   }
     } 
}
int main(void){
    dfs( 0 );
	printf("%d\n",cnt);
	return 0;
}

方法3(python):

python 复制代码
summary = [x for x in range(1,14)]
summit = 0
for item in summary:
    summary_1 = summary.copy()
    summary_1.remove(item)
    for item_1 in summary_1:
        summary_2 = summary_1.copy()
        summary_2.remove(item_1)
        for item_2 in summary_2:
            summary_3 = summary_2.copy()
            summary_3.remove(item_2)
            for item_3 in summary_3:
                summary_4 = summary_3.copy()
                summary_4.remove(item_3)
                for item_4 in summary_4:
                    summary_5 = summary_4.copy()
                    summary_5.remove(item_4)
                    for item_5 in summary_5:
                        summary_6 = summary_5.copy()
                        summary_6.remove(item_5)
                        for item_6 in summary_6:
                            summary_7 = summary_6.copy()
                            summary_7.remove(item_6)
                            for item_7 in summary_7:
                                summary_8 = summary_7.copy()
                                summary_8.remove(item_7)
                                a = item + item_1
                                b = item_2 - item_3
                                c = item_4 * item_5
                                d = item_6 / item_7
                                if a in summary_8 and b in summary_8 and c in summary_8 and d in summary_8:
                                    summit += 1
print(summit)
相关推荐
别NULL4 小时前
机试题——疯长的草
数据结构·c++·算法
ZSYP-S5 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
唐叔在学习5 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA5 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
武昌库里写JAVA8 小时前
浅谈怎样系统的准备前端面试
数据结构·vue.js·spring boot·算法·课程设计
S-X-S8 小时前
代码随想录刷题-数组
数据结构·算法
l138494274518 小时前
每日一题(4)
java·数据结构·算法
kyrie_sakura9 小时前
c++数据结构算法复习基础--13--基数算法
数据结构·c++·算法
XWXnb69 小时前
数据结构:顺序表
数据结构·算法
橘颂TA9 小时前
【C++】数据结构 顺序表的实现(详解)
开发语言·数据结构·c++·算法