有一种电脑赌博的游戏,电脑先生成两个8*8的图案块(只含有'.','*','#'),如下图
方块1: 方块2:
........ ..*.....
...*...* ...*...*
....*... .*..*#.*
....#.#. .*#.*...
....#... .*..*...
.#..*... .*..*...
...*..#. ...#..#.
....#... ...#..#.
当你按键开始游戏的之后,电脑随机的多次转动两个方形块(向右90度旋转);
例如将方块1旋转2次,方块2旋转3次后方块变为如下图形。
方块1: 方块2:
...#.... .**.....
.#..*... ......##
...*..#. ..#.....
...#.... ..****..
.#.#.... .*....##
...*.... *..#....
*...*... ..****..
........ ........
电脑之后会将两个方形图案重叠起来。
如果两个'.'重合在一起你可以得到1分,
如果两个'*'重合在一起你可以得到2分,
如果两个'#'重合在一起你可以得到3分。
现在给你初始的两个8*8的方形块请你算出你得分的期望。
Input
输入数据共16行,前8行描述了方块1,后8行描述了方块2。
Output
输出一行:你的得分的期望值(四舍五入到小数点后两位)。
Sample Input
........ ...*...* ....*... ....#.#. ....#... .#..*... ...*..#. ....#... ..*..... ...*...* .*..*#.* .*#.*... .*..*... .*..*... ...#..#. ...#..#.
Sample Output
43.00
不管随机旋转都多少次。一共就有4*4=16种情况。全部求出来/16就可以。
#include <stdio.h> #include <string.h> char a[10][10]; char b[10][10]; int main() { int judge(int t,int k); int i,j; int sum=0; for (i=0;i<8;i++) scanf("%s",a[i]); for (i=0;i<8;i++) scanf("%s",b[i]); for (i=0;i<4;i++) for(j=0;j<4;j++) sum+=judge(i,j); printf("%.2f",(double)sum/16); return 0; } int judge(int t,int k) { int i,j; int ans=0; char ai[10][10]; char bi[10][10]; for(i=0;i<8;i++) { strcpy(ai[i],a[i]); strcpy(bi[i],b[i]); } char tm[10][10]; memset(tm,'\0',sizeof(tm)); while(t--) { for (i=0;i<8;i++) for(j=0;j<8;j++) tm[7-j][i]=ai[i][j];
for (i=0;i<8;i++) strcpy(ai[i],tm[i]); } while(k--) { for (i=0;i<8;i++) for(j=0;j<8;j++) tm[7-j][i]=bi[i][j]; for (i=0;i<8;i++) strcpy(bi[i],tm[i]); } for (i=0;i<8;i++) for(j=0;j<8;j++) if(ai[i][j]==bi[i][j]) { switch (ai[i][j]) { case '.': ans+=1; break; case '*': ans+=2; break; case '#': ans+=3; break; } } return ans; }