问题 E: 不打不相识
题目描述
这一日,快码佳编四兄弟姐妹来到了一个大都市。好繁华的大都市,他们看着满目琳琅的各种好玩的东西。
正在这个时候,一匹快马过来。
为了避马,快快不幸撞到了一个满脸胡须的大汉,并把一个珠宝摊撞倒了。大家争论了很久,到底该谁赔人家东西。
大汉很生气,要跟快快做一个了断。不过大家都是文明人,当然不能打打杀杀。所以他们决定掷骰子以决定由谁说了算。为了防止作弊,佳佳去一家监控店让他们帮忙,看看有没有人在掷骰子过程中作弊。
监控店老板用摄像头把骰子拍成照片,以监控有没有作弊,防止有人在开钟的时候做手脚。
那么如何识别出骰子在最上面的点数呢?
现在摄像头能够拍成照片,并自动将四条边转成跟跟X轴Y轴平行,但却无法知道是转到了哪个角度(4个不同方向),现在你帮忙写个程序去识别下点数。
输入
对于骰子点数,摄像头的照片由3行组成,每行由3个字符构成,“o”或者“:”,其中"o"代表这里是有凹下去的,":"代表这里是平的
输出
输出一个整数表示点数(1~6),如果无法识别或不符合点数应该的图形则输出“unknown”
样例输入
【样例输入1】
o:o
⭕
o:o
【样例输入2】
:😮
⭕
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;
}