根据输入的编码及变元个数,输出其主析取范式和主合取范式的二进制编码形式及公式形式。
c语言
参考这个现成的示例
#include <stdio.h>
#include <stdlib.h>
void printBinary(int num, int digits)
{
for (int i = digits - 1; i >= 0; i--)
{
printf("%d", (num >> i) & 1);
}
}
int main()
{
int code, varNum;
printf("请输入编码和变元个数,中间用空格隔开:");
scanf("%d %d", &code, &varNum);
// 计算主析取范式和主合取范式的二进制编码
int dnfCode = code, cnfCode = code;
for (int i = 1; i <= varNum; i++)
{
if (dnfCode & (1 << (varNum - i)))
{
dnfCode ^= (1 << (varNum - i));
}
else
{
cnfCode ^= (1 << (varNum - i));
}
}
// 输出主析取范式的二进制编码和公式形式
printf("主析取范式的二进制编码为:");
printBinary(dnfCode, varNum);
printf("\n主析取范式的公式形式为:");
for (int i = 1; i <= varNum; i++)
{
if ((dnfCode >> (varNum - i)) & 1)
{
printf("X%d'", i);
}
else
{
printf("X%d", i);
}
if (i < varNum)
{
printf(" ∨ ");
}
}
printf("\n");
// 输出主合取范式的二进制编码和公式形式
printf("主合取范式的二进制编码为:");
printBinary(cnfCode, varNum);
printf("\n主合取范式的公式形式为:");
for (int i = 1; i <= varNum; i++)
{
if ((cnfCode >> (varNum - i)) & 1)
{
printf("X%d", i);
}
else
{
printf("X%d'", i);
}
if (i < varNum)
{
printf(" ∧ ");
}
}
printf("\n");
return 0;
}
请输入编码和变元个数,中间用空格隔开:10 4
主析取范式的二进制编码为:0011
主析取范式的公式形式为:X1 ∨ X2
主合取范式的二进制编码为:1100
主合取范式的公式形式为:X1 ∧ X2'
只能用顺序查找的情况,(1)线性无序表;(2)有序线性链表。
长度为n的线性表最坏查找次数为:n次;最大值或最小值的比较次数为n-1次