⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1799103_ac_31ms_40k.c

📁 北大大牛代码 1240道题的原代码 超级权威
💻 C
字号:
# include <stdio.h>
# include <ctype.h>
# include <string.h>
# include <math.h>
# include <stdlib.h>
char str[2000],str1[2000];
int N,a[26],b[26];
 int run(char *s)
{
 int i,j,l,value,mark;
 char t[200];
 for(i = 0; s[i] != '\0'; i++)
 if(islower(s[i]))
     s[i] = b[s[i] - 'a'] + 48;
 strcpy(t,"(");
 strcat(s,")");
 strcat(t,s); 
 strcpy(s,t);
 while(1)
 {mark = 1; 
 for(i = 0;i < strlen(s); i++)
  if(s[i] == ')')
  {
  for(j = i; j >=0; j--)
   if(s[j] == '(')
   break;
   for(l = i - 1; l > j; l--)
   if(s[l] == '~')
   {s[l] = !((int)s[l+1] - 48) + 48;strcpy(&s[l+1],&s[l+2]);i--;}
    for(l = i - 1; l > j; l--)
   if(s[l] == '&')
   {s[l-1] = ((int)s[l-1] - 48 && (int)s[l+1] - 48) + 48;strcpy(&s[l],&s[l+2]);i-=2;}
   for(l = i - 1; l > j; l--)
   if(s[l] == '^')
   {if(s[l-1] == s[l+1]) 
    s[l-1] = 48;
    else s[l-1] = 49;
    strcpy(&s[l],&s[l+2]);i-=2;}
    for(l = i - 1; l > j; l--)
   if(s[l] == '|')
   {s[l-1] = ((int)s[l-1] - 48 || (int)s[l+1] - 48) + 48;strcpy(&s[l],&s[l+2]);i-=2;}
     if(i == j + 2)
   {
     strcpy(&s[i],&s[i+1]);
     strcpy(&s[j],&s[j+1]);
     }  
  }
  for(j=0;j<strlen(s);j++)
  if(s[j]=='('||s[j]==')')
  {mark = 0;break;}
  if(mark)break;
 } 
 value = (int)s[0] - 48;
 return value; 
}
 main()
{
 int i,j,n,l,num,mark;
 char tmp1[200],tmp2[200];
 scanf("%d\r",&n);
 for(i = 0; i < n; i++)
 { 
  N = num = mark = 0;
  printf("Data set %d: ",i+1);
  gets(str);
  for(j = 0; str[j] != '\0'; j++)
   if(str[j] == ' ')
    {strcpy(&str[j],&str[j+1]);j--;}
    for(j = 0; str[j] != '\0'; j++)
  { 
    if(islower(str[j])) 
      {
       a[str[j]-'a'] = 1;
       if(str[j+1] == ')') while(str[j+1] == ')')j++;
       if(str[j+1] == '~' || str[j+1] == '(') {strcpy(str1,&str[j+1]);str[j+1] = '\0';break;}
       if(islower(str[j+1]))
       {strcpy(str1,&str[j+1]);str[j+1] = '\0';break;} 
       }
  }
  for(j = 0; j < 26; j++)
  if(a[j]) num++;
  for(N = 0;N< pow(2,num) ;N++)
  {
    l = 0;
    for(j = 0; j < 26; j++)
     if(a[j]) 
     if(N & (int)pow(2,l++))b[j] = 1;
     else b[j] = 0;
     strcpy(tmp1,str);
     strcpy(tmp2,str1);
     if(run(tmp1) != run(tmp2))
     {mark = 1;printf("Different\n");break;}
    }
   if(!mark) printf("Equivalent\n");  
 memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -