#include<stdio.h>
#include<string.h>
int k = 1, n, m, a[1001], o = 0, e = 0, f = 1; char b[101][101], c[101][101], h[10001], d[10001];
int a1(int p, int q)//a->b
{
if (p == 0 || q == 1)return 1;
else return 0;
}
int a2(int p, int q)//a&&b
{
if (p + q == 2)return 1;
else return 0;
}
int a3(int p, int q)//a||b
{
if (p == 1 || q == 1)return 1;
else return 0;
}
int suanfa(int v)
{
int p = 1, i = v - 1, q = 1, j;
for (; i >= 0; i--)
if (h[i] == '(')
{
f = i; break;
}
for (i++; i<v;)
{
j = 0;
if (h[i] == '+'){ i++; continue; }
if (h[i] == '^')
{
i += 1;
while (h[i] == '~')
{
j++; i++;
}
if (j % 2 == 0 && a[h[i] - 'a'] || j % 2 && a[h[i] - 'a'] == 0)q = 1;
else q = 0;
i += 1;
p = a2(p, q);
}
else if (h[i] == '-')
{
i += 2;
while (h[i] == '~')
{
i++; j++;
}
if (j % 2 == 0 && a[h[i] - 'a'] || j % 2 && a[h[i] - 'a'] == 0)q = 1;
else q = 0; i++;
p = a1(p, q);
}
else if (h[i] == 'V')
{
i += 1;
while (h[i] == '~')
{
j++; i++;
}
if (j % 2 == 0 && a[h[i] - 'a'] || j % 2 && a[h[i] - 'a'] == 0)q = 1;
else q = 0;
i += 1;
p = a3(p, q);
}
else if (h[i] == '~')
{
while (h[i] == '~'){ j++; i++; }
if (j % 2 == 0 && a[h[i] - 'a'] || j % 2 && a[h[i] - 'a'] == 0)p = 1;
else p = 0; i++;
}
else if (h[i] >= 'a'&&h[i] <= 'z'){ p = a[h[i] - 'a']; i++; }
}
for (i = f; i <= v; i++)
h[i] = '+';
if (p == 1){ h[f] = 'a' + n; }
else h[f] = 'a' + n + 1;
return 0;
}
int aa()
{
int i;
for (i = 0; f&&h[i]; i++)
if (h[i] == ')')
{
suanfa(i);
}
return 0;
}
int yunsuan(int l)
{
f = 1;
int i = 0, j;
for (i = 0; d[i]; i++)
h[i] = d[i];
h[i] = 0;
if (l == n)
{
aa();
if (a[h[0] - 'a'])
{
j = k;
for (i = 0; i<n; i++)
if (a[i])
{
if (j == k)
{
puts(""); printf("方案%d\n", k); k++;
}
printf("派:"); printf("%s去\n", b[i]);
}
}
return 0;
}
a[l] = 0;
yunsuan(l + 1);
a[l] = 1;
yunsuan(l + 1);
return 0;
}
int main()
{
puts("****************************************************************");
puts("**** ****");
puts("**** 《歡迎進入邏輯運算》 ****");
puts("**** ****");
puts("**** 用大寫的'V'代表或運算 ****");
puts("**** 用'->'代表蘊含運算 ****");
puts("**** 用'~'代表非運算 ****");
puts("**** 用'^'代表且運算 ****");
puts("****************************************************************");
puts("");
int i;
puts("請先輸入一個數代表此公司派幾個人去");
scanf("%d", &n); a[n] = 1; a[n + 1] = 0;
printf("請輸入這%d個人的名字\n", n);
for (i = 0; i<n; i++)
{
printf("命題%c\n", 'a' + i);
scanf("%s", b[i]);
}
puts("請輸入一個數代表公司派人的條件個數");
scanf("%d", &m);
printf("請輸入這%d個條件\n", m);
h[0] = '('; h[1] = '(';
for (i = 0; i<m; i++)
{
scanf("%s", c[i]);
strcat(h, c[i]);
if (i == m - 1)strcat(h, "))");
else strcat(h, ")^(");
}
strcat(d, h);
yunsuan(0);
puts("");
return 0;
}
uj5u.com熱心網友回復:
和你一樣 同樣的代碼 看不到 朋友那個學校的
uj5u.com熱心網友回復:
同學,你代碼哪里看的?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/58985.html
標籤:基礎類
