程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 數字組合問題

數字組合問題

編輯:關於C++

問題描述

有7對數字:兩個1,兩個2,兩個3,...兩個7,把它們排成一行。 要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是一個符合要求的排列: 17126425374635 當然,如果把它倒過來,也是符合要求的。 請你找出另一種符合要求的排列法,並且這個排列法是以74開頭的。 注意:只填寫這個14位的整數,不能填寫任何多余的內容,比如說明注釋等。 74****4*7*******

#include<stdio.h>  
#define n 7  
int a[8];  
int m[15];  
int ok(int h)  
{  
    int i;  
    if(a[h]+h+1>14)  
    return 0;  
    for(i=1;i<=7;i++)  
    {  
        if(a[i]!=0&&i!=h)  
        {  
            if(a[h]+h+1==a[i]||a[h]+h+1==a[i]+i+1||a[h]==a[i]||a[h]==a[i]+i+1)  
            return 0;  
        }  
    }  
    return 1;  
}  
void compute(int h)  
{  
    //printf("%d\n",h);  
      
      
    int i;  
    if(h==8&&a[7]==1&&a[4]==2)  
    {  
        for(i=1;i<=7;i++)  
        {  
            m[a[i]]=i;  
            m[a[i]+i+1]=i;  
        }  
        for(i=1;i<=14;i++)  
        printf("%d\t",m[i]);  
        printf("\n");  
        return;  
    }  
    for(i=1;i<=14;i++)  
    {  
        a[h]=i;  
        if(ok(h))  
        {  
            compute(h+1);  
        }  
        a[h]=0;  
    }  
}  
int main()  
{  
    int i;  
    for(i=0;i<=14;i++)  
    {  
        m[i]=0;  
    }  
    for(i=0;i<=7;i++)  
    {  
        a[i]=0;  
    }  
    compute(1);  
    return 0;  
}

結果

\
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved