sat

来源:互联网 发布:java实现rpc异步 编辑:程序博客网 时间:2024/04/30 12:29

#include <iostream>
#include <cstdio>
using namespace std;
int n;
bool *a;
bool IsOk()
{
    if(n>=0&&n<=50) return 1;
    else return 0;
}

int main()
{
    cout<<"合取范式为A0&A1&…A9:"<<endl;
    cout<<"请输入问题规模(必须是小于50的数字):"<<endl;
    cin>>n;
    bool S,A[10];
    while(IsOk())
    {
        for(int i=0; i<n; i++)
            a[i]=0;      
        a[-1]=1;
        a[-2]=1;
        a[-3]=1;
        a[-4]=1;
        a[-5]=1;
        a[-6]=1;
        a[-7]=1;
        a[-8]=1;
        a[-9]=1;

        while(n>0)
        {
            for(int i=0; i<n; i++)  A[0]&=a[i];
            for(int i=0; i<n; i++)  A[1]&=a[i-1];
            for(int i=0; i<n; i++)  A[2]&=a[i-2];
            for(int i=0; i<n; i++)  A[3]&=a[i-3];
            for(int i=0; i<n; i++)  A[4]&=a[i-4];
            for(int i=0; i<n; i++)  A[5]&=a[i-5];
            for(int i=0; i<n; i++)  A[6]&=a[i-6];
            for(int i=0; i<n; i++)  A[7]&=a[i-7];
            for(int i=0; i<n; i++)  A[8]&=a[i-8];
            for(int i=0; i<n; i++)  A[9]&=a[i-9];
            S=A[0]&A[1]&A[2]&A[3]&A[4]&A[5]&A[6]&A[7]&A[8]&A[9];
            if(S)
            {
                cout<<"有解,且解为:"<<a<<endl;
            }
            else    a[n]=1;
            n--;
        }
        cout<<"无解!"<<endl;
    }
    cout<<"输入有误!"<<endl;
    return 0;
}

 

原创粉丝点击