如何用计算机程序语言来保存b比a大,c比a大,但c不一定比b大这样的大小逻辑关系?

用什么样一种数据结构来保存这样的逻辑关系?

比如输入条件是:

b>a,c>a,

假如这样保存

if(b>a)
把每个数赋值一个具体的数

b=2,a=1;

if(c>a)

c=a+1;

即c=2;

if(b==c) //即b==2,c==2

输出b与c大小不确定.

else

b与c大小确定

输出

但这样做的问题是

如果条件是 c>b>a, e>d>a

设a=1那么

b=2,c=3

d=2,e=3

如果按照相等来判断的话

判断方法:

if(c==e)

print("c与e关系不确定")

else

print("c与e关系能确定")

但 这样的话b和e的关系也能确定,因为b!=e,

可实际上b和e的关系不能确定

如果不赋值具体的数,用集合来表示:
输入:b>a,c>a

设置a=100,

b=[101,无穷大]

c=[101,无穷大]

输入增加 d>b 即变为:d>b>a,c>a

给d赋值:

d=[b[0]+1,无穷大]即d=[102,无穷大]

这样判断d是否大于a只需判断d[0]是否大于a[0]即可,就是集合的利用包含关系来判断

如果此时输入

e>c 即变为:d>b>a,e>c>a

给e赋值:

e就应该是[c[0]+1,无穷大]
即:e= [102,无穷大]

e与d的集合一样,说明e与d不确定

如果增加了一个f>e 即:d>b>a,f>e>c>a

为f赋值就应该是: f=[c[0]+1,无穷大] 即[103,无穷大]

f=[103,无穷大] 而d=[102,无穷大] f[0]>d[0],f比d大! 实际上f与d的关系不确定!这就矛盾了

问题很明显,没有考虑这个集合上限,导致和赋值个具体数的方法没区别
如果这样改进 ,加一个集合上限给它呢?:

条件 :b>a,c>a

设 a=100,

int x=某个具体的数

b=[101,x]

c=[101,x]

这样保存

如果此时输入:

d>b 即d>b>a,c>a

如果设置 d=[x+1,x*2] 即d的每个数都比b大,

实际上这样也是有问题 的,

  某个具体的数x 怎么确定? 随便设置一个?比如10000,只要是一个确定的数,这样肯定还是有bug的

这些bug很容易想到这里就暂时不写了.

那么到底怎么用计算机语言保存这样的一种逻辑关系呢?

一般来说,C语言的类型都有一个上限、下限,你可以用一个特殊的值表示无穷(而不是它真实的值)。
至于你说的逻辑,这个可以用一种脚本语言来表示,比如js
function foo(a,b,c) {
return b>a&&c>a;
}
用脚本引擎加载执行。此时C/C++是host,这种脚本语言作为script

你好,可以用类似以下方法:

int main(int argc, char *argv[])
{

int a;
int bb[100];
int cc[100];
int b, c;
scanf("%d", &a);
for (int i = 0; i < 100; i++)
{
    scanf("%d%d", &b, &c);
    if (b > a)
        bb[i] = b;
    if (c > a)
        cc[i] = c;

}

}
这样bb,cc数组里面的值都比a大,但bb,cc数组的值比较并不确定谁大谁小