OJ已过,仅供参考,不要直接复制粘贴(原创)
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
char str[102]={};
while(gets(str)){
int i, j ,count;
//第一行按顺序输出表达式中的所有词。每个词之间用空格分开。
int sum1 = strlen(str);
for(i=0;i<sum1;i++){
if(str[i]!=' ')printf("%c",str[i]);
if(str[i]<='z'&&str[i]>='a'){ printf(" ");}
if(str[i]!=' '
&&!(str[i]<='z'&&str[i]>='a')
&&!(str[i]=='-'&&str[i+1]=='>')
&&!(str[i]=='|'&&str[i+1]=='|')
&&!(str[i]=='<'&&str[i+1]=='-'&&str[i+2]=='>')) printf(" ");
}printf("\n");
//第二行按 字母序 输出表达式中的所有逻辑变量,用空格分开。
count =0;
for(i=97;i<=123;i++){
int flag=0;
for(j=0;j<sum1;j++){
if((int)str[j]==i){flag = 1; count++; printf("%c ",str[j]);}
if(flag) break;
}
}printf("\n");
//第三行开始输出逻辑变量值的所有组合情况。
int A[24]={0};
for(i=pow(2,count);i>0;i--){
int a=i;
for(j=count-1;j>=0;j--){
if((a-(int)pow(2,j))>0){ A[j]=1; a=a-pow(2,j);}
else A[j]=0;
printf("%d ",A[j]);
}printf("\n");
}
}
return 0;
}