天天看點

藍橋杯第六屆省賽-1- 方格填數

題目描述:

在2行5列的格子中填入1到10的數字。

要求:

相鄰的格子中的數,右邊的大于左邊的,下邊的大于上邊的。

如【圖1.png】所示的2種,就是合格的填法。

請你計算一共有多少種可能的方案。

請送出該整數,不要填寫任何多餘的内容(例如:說明性文字)。

分析:

這題其實比較簡單,隻需要将a[10]={1,2,3,4,5,6,7,8,9,10}全排列,然後每次驗證目前排列是否符合情況

emmm,好多次把algorithm拼錯了,罰寫幾遍QAQ...

#include<iostream>
#include<algorithm>
using namespace std;
int a[10]={1,2,3,4,5,6,7,8,9,10};
int judge();
int sum=0; 
int main()
{
	do
	{
		if(judge())
		sum++; 
	}while(next_permutation(a,a+10)); 
	cout<<sum;
} 
int judge()
{
	if(a[9]<a[8]||a[9]<a[4])	return 0;
	if(a[8]<a[7]||a[8]<a[3])	return 0;
	if(a[7]<a[6]||a[7]<a[2])	return 0;
	if(a[6]<a[5]||a[6]<a[1])	return 0;
	if(a[5]<a[0])	return 0;
	if(a[4]<a[3])	return 0;
	if(a[3]<a[2])	return 0;
	if(a[2]<a[1])	return 0;
	if(a[1]<a[0])	return 0;
	return 1;
	
}           

答案:

42

繼續閱讀