藍橋杯 7對數字排列問題

2021-08-16 01:30:56 字數 1395 閱讀 9554

問題描述:今有7對數字:兩個1,兩個2,兩個3,...兩個7,把它們排成一行。

要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是乙個符合要求的排列:

問題是寫出以74開頭的滿足條件的序列。

問題分析:根據問題的描述,我們很容易地知道,第7個位置是4,第9個位置是7,任務是將其餘的十個數字擺進去。擺放6,2,1的話,只能從第三個開始擺;擺放5,3的話,只能從第四個開始擺(因為位置7,9已被占用)。乙個合理的排列是每個數字恰好無重複地排在每個位置上,也就是說,乙個位置不能既出現3,又出現5。

那麼,我們可以將所有的數字要占用的位置號放進set中,如果set中恰好有14個元素,說明無重複,滿足條件;否則必定有部分位置沒有放置數字和放置超過1個數字。這裡利用了set容器內元素無重複的特性。

值得注意的是,每次迴圈一遍之後,要將set置空。

**實現:

#include #include using namespace std;

int main(){

int a[15]; //存放14位整數的陣列

memset(a,0,15*sizeof(int));

a[1] = 7;

a[2] = 4;

a[7] = 4;

a[9] = 7;

sets;

for(int i=3;i<=6;i++){ //表示第乙個6擺放的位置

for(int j=4;j<=8;j++){ //表示第乙個5擺放的位置

for(int k=4;k<=10;k++){ //表示第乙個3擺放的位置

for(int x=3;x<=11;x++){ //表示第乙個2擺放的位置

for(int y=3;y<=12;y++){ //表示第乙個1擺放的位置

s.insert(1);

s.insert(2);

s.insert(7);

s.insert(9);

s.insert(i);

s.insert(i+7);

s.insert(j);

s.insert(j+6);

s.insert(k);

s.insert(k+4);

s.insert(x);

s.insert(x+3);

s.insert(y);

s.insert(y+2);

if(s.size()==14){

a[i] = a[i+7] = 6;

a[j] = a[j+6] = 5;

a[k] = a[k+4] = 3;

a[x] = a[x+3] = 2;

a[y] = a[y+2] = 1;

for(int i=1;i<=14;i++){

cout《結果是:74151643752362

藍橋杯 排列數字 今有7對數字

今有7對數字 兩個1,兩個2,兩個3,兩個7,把它們排成一行。要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是乙個符合要求的排列 17126425374635 當然,如果把它倒過來,也是符合要求的。請你找出另一種符合要求的排列法,並且這個排列法是以7...

7對數字 藍橋杯2014

今有7對數字 兩個1,兩個2,兩個3,兩個7,把它們排成一行。要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是乙個符合要求的排列 當然,如果把它倒過來,也是符合要求的。請你找出另一種符合要求的排列法,並且這個排列法是以74開頭的。注意 只填寫這個14...

藍橋杯 數字排列

今有7對數字 兩個1,兩個2,兩個3,兩個7,把它們排成一行。要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是乙個符合要求的排列 17126425374635 當然,如果把它倒過來,也是符合要求的。請你找出另一種符合要求的排列法,並且這個排列法是以7...