逻辑条件练习

闲来无事码码这个题,练习一下逻辑语句的写法,加油加油,周六蓝桥杯加油!

大概简述一下我的思路:

1.暴力出所有选项的组合

2.看某种组合是否满足所有的条件

ans:BCACACDABA

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;

int main(){
    char no[11],ans;
    int i;
    int c[4],t,count,t2;
    
    for(no[1]='A';no[1]<='D';no[1]++){
        for(no[2]='A';no[2]<='D';no[2]++){
            for(no[3]='A';no[3]<='D';no[3]++){
                for(no[4]='A';no[4]<='D';no[4]++){
                    for(no[5]='A';no[5]<='D';no[5]++){
                        for(no[6]='A';no[6]<='D';no[6]++){
                            for(no[7]='A';no[7]<='D';no[7]++){
                                for(no[8]='A';no[8]<='D';no[8]++){
                                    for(no[9]='A';no[9]<='D';no[9]++){
                                        for(no[10]='A';no[10]<='D';no[10]++){
                                            memset(c,0,sizeof(c));
                                            //统计个数 
                                            for(i=1;i<=10;i++){
                                                if(no[i]=='A')c[0]++;
                                                else if(no[i]=='B')c[1]++;
                                                else if(no[i]=='C')c[2]++;
                                                else c[3]++;
                                            } 
                                            
                                            t=0;
                                            t2=0;
                                            for(i=1;i<4;i++){
                                                if(c[i]>c[t])t=i;
                                                else t2=i;
                                            }
                                            ans=t2+'A';
                                            count=0;
                                            
                                            //1
                                            if(no[1]=='A'||no[1]=='B'||no[1]=='C'||no[1]=='D')count++;        
                                            
                                            //2
                                            if((no[2]=='A'&&no[5]=='C')||
                                               (no[2]=='B'&&no[5]=='D')||
                                               (no[2]=='C'&&no[5]=='A')||
                                               (no[2]=='D'&&no[5]=='B'))count++;    
                                            
                                            //3
                                            if((no[3]=='A'&&no[3]!=no[6]&&no[3]!=no[2]&&no[3]!=no[4])||
                                               (no[3]=='B'&&no[6]!=no[3]&&no[6]!=no[2]&&no[6]!=no[4])||
                                               (no[3]=='C'&&no[2]!=no[6]&&no[2]!=no[3]&&no[2]!=no[4])||
                                               (no[3]=='D'&&no[4]!=no[6]&&no[4]!=no[2]&&no[3]!=no[3]))count++;    
                                            
                                            //4    
                                            if((no[4]=='A'&&no[1]==no[5]&&no[2]!=no[7]&&no[1]!=no[9]&&no[6]!=no[10])||
                                               (no[4]=='B'&&no[1]!=no[5]&&no[2]==no[7]&&no[1]!=no[9]&&no[6]!=no[10])||
                                               (no[4]=='C'&&no[1]!=no[5]&&no[2]!=no[7]&&no[1]==no[9]&&no[6]!=no[10])||
                                               (no[4]=='D'&&no[1]!=no[5]&&no[2]!=no[7]&&no[1]!=no[9]&&no[6]==no[10]))count++;
                                            
                                            //5
                                            if((no[5]=='A'&&no[5]==no[8])||
                                               (no[5]=='B'&&no[5]==no[4])||
                                               (no[5]=='C'&&no[5]==no[9])||
                                               (no[5]=='D'&&no[5]==no[7]))count++;
                                            
                                            //6
                                            if((no[6]=='A'&&no[8]==no[2]&&no[8]==no[4])||
                                               (no[6]=='B'&&no[8]==no[1]&&no[8]==no[6])||
                                               (no[6]=='C'&&no[8]==no[3]&&no[8]==no[10])||
                                               (no[6]=='D'&&no[8]==no[5]&&no[8]==no[9]))count++;
                                               
                                            //7
                                            if((no[7]=='A'&&ans=='C')||
                                               (no[7]=='B'&&ans=='B')||
                                               (no[7]=='C'&&ans=='A')||
                                               (no[7]=='D'&&ans=='D'))count++;
                                               
                                            //8
                                            if((no[8]=='A'&&abs(no[7]-no[1])!=1&&abs(no[5]-no[1])==1&&abs(no[2]-no[1])==1&&abs(no[10]-no[1])==1)||
                                               (no[8]=='B'&&abs(no[7]-no[1])==1&&abs(no[5]-no[1])!=1&&abs(no[2]-no[1])==1&&abs(no[10]-no[1])==1)||
                                               (no[8]=='C'&&abs(no[7]-no[1])==1&&abs(no[5]-no[1])==1&&abs(no[2]-no[1])!=1&&abs(no[10]-no[1])==1)||
                                               (no[8]=='D'&&abs(no[7]-no[1])==1&&abs(no[5]-no[1])==1&&abs(no[2]-no[1])==1&&abs(no[10]-no[1])!=1))count++; 
                                            
                                            //9
                                            if((no[9]=='A'&&((no[1]==no[6]&&no[6]!=no[5])||(no[1]!=no[6]&&no[6]==no[5])))||
                                               (no[9]=='B'&&((no[1]==no[6]&&no[10]!=no[5])||(no[1]!=no[6]&&no[10]==no[5])))||
                                               (no[9]=='C'&&((no[1]==no[6]&&no[2]!=no[5])||(no[1]!=no[6]&&no[2]==no[5])))||
                                               (no[9]=='D'&&((no[1]==no[6]&&no[9]!=no[5])||(no[1]!=no[6]&&no[9]==no[5]))))count++;
                                            
                                            //10  
                                            if((no[10]=='A'&&c[t]-c[t2]==3)||
                                               (no[10]=='B'&&c[t]-c[t2]==2)||
                                               (no[10]=='C'&&c[t]-c[t2]==4)||
                                               (no[10]=='D'&&c[t]-c[t2]==1))count++; 
                                            
                                            if(count==10){
                                                for(i=1;i<=10;i++)cout<<no[i];
                                                cout<<endl;
                                            }
                                        }
                                    }    
                                }
                            }
                        }
                    }
                }
            }
        }
    }    
    return 0;
}

 有几个类似的题:

https://www.dotcpp.com/oj/problem1534.html

https://www.dotcpp.com/oj/problem1498.html

posted @ 2020-10-13 22:36  金龙喩  阅读(160)  评论(0)    收藏  举报