问题 E: 不打不相识

Posted -yjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问题 E: 不打不相识相关的知识,希望对你有一定的参考价值。

题目描述
这一日,快码佳编四兄弟姐妹来到了一个大都市。好繁华的大都市,他们看着满目琳琅的各种好玩的东西。
正在这个时候,一匹快马过来。
为了避马,快快不幸撞到了一个满脸胡须的大汉,并把一个珠宝摊撞倒了。大家争论了很久,到底该谁赔人家东西。
大汉很生气,要跟快快做一个了断。不过大家都是文明人,当然不能打打杀杀。所以他们决定掷骰子以决定由谁说了算。为了防止作弊,佳佳去一家监控店让他们帮忙,看看有没有人在掷骰子过程中作弊。
监控店老板用摄像头把骰子拍成照片,以监控有没有作弊,防止有人在开钟的时候做手脚。
那么如何识别出骰子在最上面的点数呢?
现在摄像头能够拍成照片,并自动将四条边转成跟跟X轴Y轴平行,但却无法知道是转到了哪个角度(4个不同方向),现在你帮忙写个程序去识别下点数。

输入
对于骰子点数,摄像头的照片由3行组成,每行由3个字符构成,“o”或者“:”,其中"o"代表这里是有凹下去的,":"代表这里是平的

输出
输出一个整数表示点数(1~6),如果无法识别或不符合点数应该的图形则输出“unknown”

样例输入
【样例输入1】
o:o
?
o:o
【样例输入2】
::o
?
o::
【样例输入3】
ooo
:::
o:o

样例输出
【样例输出1】
5
【样例输出2】
3
【样例输出3】
unknown

提示

上图是点数1到6的图。 2 3另外一条对角线上也是可以的
当然掷骰子结束后,他们不打不相识,也成为了好朋友。
技术图片

题解:模拟题,看到大佬的写法,发现可以读入字符后查找.当时我是if if 比较,写吐血了.学到了.

最优解法

#include <bits/stdc++.h>

using namespace std;
char S[9][4][4]={
{//1
":::",
":o:",
":::"
},
{//2
"o::",
":::",
"::o"
},
{//2
"::o",
":::",
"o::"
},
{//3
"o::",
":o:",
"::o"
},
{//3
"::o",
":o:",
"o::"
},
{//4
"o:o",
":::",
"o:o"
},
{//5
"o:o",
":o:",
"o:o"
},
{//6
"o:o",
"o:o",
"o:o"
},
{//6
"ooo",
":::",
"ooo"
}
};
char c[3][3];
bool check(char *a,char *b){
    for(int j=0;j<3;j++){
        if(a[j]!=b[j]) return false;
        //cout<<"a="<<a[j]<<endl;
        //cout<<"b="<<b[j]<<endl;
    }
    return true;
}
int a[9]={1,2,2,3,3,4,5,6,6};
int main()
{
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++)
            cin>>c[i][j];
        getchar();
    }
    int f=-1;
    for(int i=0;i<9;i++){
        int m=0;
        //cout<<"i="<<i<<endl;
        for(int j=0;j<3;j++){
            if(!check(S[i][j],c[j])) m=1;
        }
        if(!m){
            f=i;
            break;
        }
    }
    if(f==-1) cout<<"unknown"<<endl;
    else cout<<a[f]<<endl;
    //cout << "Hello world!" << endl;
    return 0;
}

最辣鸡解法

//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
using namespace std;
char c[10][10];
 
bool check2(int i,int j){
    i=2,j=2;
    if(c[i-1][j-1]=='o'||c[i+1][j-1]=='o'||c[i-1][j+1]=='o'||c[i+1][j+1]=='o'){
        return true;
    }
    return false;
}
bool check4(int i,int j){
    if(c[i][j]=='o'&&c[i][j+1]=='o'&&c[i+1][j]=='o'&&c[i+1][j+1]=='o') return true;
    return false;
}
void p(int i){
    cout<<i<<endl;
}
bool check5(){
    if(c[2][1]==':'&&c[2][3]==':'&&c[1][2]==':'&&c[3][2]==':') return true;
    return false;
}
 
int main(){
    int ans=0;
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            cin>>c[i][j];
            //cout<<c[i][j]<<endl;
            if(c[i][j]=='o') ans++;
        }
        getchar();
    }
    if(ans==1){
        /*if(c[2][2]=='o'||c[2][1]=='o'||c[2][3]=='o'||c[1][2]=='o'||c[3][2]=='o'){
                p(1);
                return 0;
            }*/
 
           if(c[2][2]=='o'){
                p(1);
                return 0;
           }
 
            /*p(1);
            return 0;*/
        /*if(c[1][1]=='o'||c[2][2]=='o'||c[3][3]=='o'||c[3][1]=='o'||c[1][3]=='o'){
            p(1);
            return 0;
        }*/
       /* p(1);
        return 0;*/
        //cout<<"unknown"<<endl;
    }
    else if(ans==2){
            /*for(int i=1;i<=3;i++){
                if(c[2][i]=='o'&&check2(2,i)){
                    p(2);
                    return 0;
                }
            }*/
            /*if(c[2][2]=='o'&&check2(1,1)){
                p(2);
                return 0;
            }*/
 
            if(c[1][1]=='o'&&c[3][3]=='o'){ //对角线
                p(2);
                return 0;
            }
            if(c[1][3]=='o'&&c[3][1]=='o'){
                p(2);
                return 0;
            }
 
            cout<<"unknown"<<endl;
    }
    else if(ans==3){
        int f=1;
        for(int i=1;i<=3;i++) if(c[i][i]!='o') f=0;
        if(f){
            p(3);
            return 0;
        }
        f=1;
        for(int i=1;i<=3;i++) if(c[3-i+1][i]!='o') f=0;
        if(f){
            p(3);
            return 0;
        }
        cout<<"unknown"<<endl;
    }
    else if(ans==4){
        /*for(int i=1;i<=2;i++){
            for(int j=1;j<=2;j++){
                if(check4(i,j)){
                    p(4);
                    return 0;
                }
            }
        }*/
        /*for(int i=1;i<=2;i++){
            if(c[i][1]=='o'&&c[i+1][1]=='o'&&c[i][3]=='o'&&c[i+1][3]=='o'){
                p(4);
                return 0;
            }
        }
        for(int i=1;i<=2;i++){
            if(c[1][i]=='o'&&c[1][i+1]=='o'&&c[3][i]=='o'&&c[3][i+1]=='o'){
                p(4);
                return 0;
            }
        }*/
 
        if(c[1][1]=='o'&&c[3][1]=='o'&&c[1][3]=='o'&&c[3][3]=='o'){
            p(4);
            return 0;
        }
 
        cout<<"unknown"<<endl;
    }
    else if(ans==5){
        if(check5()){
            p(5);
            return 0;
        }
        cout<<"unknown"<<endl;
    }
    else if(ans==6){
        int f=1;
        /*for(int i=1;i<=3;i++) if(c[i][3]!=':') f=0;
        if(f){
            p(6);
            return 0;
        }
        f=1;
        for(int i=1;i<=3;i++) if(c[i][1]!=':') f=0;
        if(f){
            p(6);
            return 0;
        }
        f=1;*/
        for(int i=1;i<=3;i++) if(c[i][2]!=':') f=0;
        if(f){
            p(6);
            return 0;
        }
 
        /*f=1;
        for(int i=1;i<=3;i++) if(c[3][i]!=':') f=0;
        if(f){
            p(6);
            return 0;
        }
        f=1;
        for(int i=1;i<=3;i++) if(c[1][i]!=':') f=0;
        if(f){
            p(6);
            return 0;
        }*/
        f=1;
        for(int i=1;i<=3;i++){
           if(c[2][i]!=':') f=0;
        }
        if(f){
            p(6);
            return 0;
        }
        /*for(int i=1;i<=3;i++){
            int f=1;
            for(int j=1;j<=3;j++){
                if(c[i][j]!=':') f=0;
                //cout<<c[i][j];
            }
            //cout<<endl;
            if(f){
                p(6);
                return 0;
            }
        }
        for(int i=1;i<=3;i++){
            int f=0;
            for(int j=1;j<=3;j++){
                if(c[j][i]!=':') f=0;
                //cout<<c[j][i];
            }
            //cout<<endl;
            if(f){
                p(6);
                return 0;
            }
        }*/
        cout<<"unknown"<<endl;
    }
    else cout<<"unknown"<<endl;
 
    //printf("HelloWorld!");
    return 0;
}

以上是关于问题 E: 不打不相识的主要内容,如果未能解决你的问题,请参考以下文章

错误:E/RecyclerView:未连接适配器;跳过片段上的布局

错误记录Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )(代码片段

常用的几个JQuery代码片段

刷新片段不再起作用?

电脑的硬盘E打不开,而且弹出由于I/O设备错误,无法运行此项请求,该怎么办

从Snipplr获取一个代码片段