1 #include<iostream> 2 using namespace std; 3 4 int main(){ 5 int a[15][10]; 6 int in[4][4]; 7 for(int i=0;i<15;i++){ 8 for(int j=0;j<10;j++){ 9 cin>>a[i][j]; 10 } 11 } 12 for(int i=0;i<4;i++){ 13 for(int j=0;j<4;j++){ 14 cin>>in[i][j]; 15 } 16 } 17 int n; 18 cin>>n; 19 20 int m[4]; 21 for(int i=0;i<4;i++){ //計算掉落方塊每列的相對長度 22 m[i]=0; 23 for(int j=0;j<4;j++){ 24 if(in[j][i]==1) m[i]=j+1; 25 } 26 } 27 int f[4]; 28 for(int i=n-1;i<n+3;i++){ //計算原有方塊每列的相對長度 29 f[i-n+1]=0; 30 for(int j=0;j<15;j++){ 31 if(a[j][i]==1){ 32 f[i-n+1]=15-j; 33 break; 34 } 35 } 36 } 37 int max=0; 38 for(int i=0;i<4;i++){ //計算最大長度,即掉落方塊的最高點 39 if(m[i]!=0&&m[i]+f[i]>=max){ 40 max=m[i]+f[i]; 41 } 42 } 43 for(int i=0;i<4;i++){ 44 for(int j=0;j<4;j++){ 45 if(in[i][j]) a[15-max+i][n-1+j]=1; 46 } 47 } 48 for(int i=0;i<15;i++){ 49 for(int j=0;j<10;j++){ 50 cout<<a[i][j]<<" "; 51 } 52 cout<<endl; 53 } 54 return 0; 55 }
第一種思路的代碼:ios
1 #include<stdio.h> 2 int a[19][10],b[4][4]; 3 int compareBlock(int r,int c){ 4 for(int i=0;i<4;i++){ 5 for(int j=0;j<4;j++){ 6 if(b[i][j]==1&&a[i+r][j+c]==1) return 1; 7 } 8 } 9 return 0; 10 } 11 int main() 12 { 13 for(int i=15;i<19;i++){ 14 for(int j=0;j<10;j++){ 15 a[i][j]=1; 16 } 17 } 18 int n,temp=0; 19 for(int i=0;i<15;i++) 20 { 21 for(int j=0;j<10;j++) 22 { 23 scanf("%d",&a[i][j]); 24 } 25 } 26 for(int i=0;i<4;i++) 27 { 28 for(int j=0;j<4;j++) 29 { 30 scanf("%d",&b[i][j]); 31 } 32 } 33 scanf("%d",&n); 34 int mark; 35 36 for(int i=0;i<=14;i++) 37 { 38 if(compareBlock(i,n-1)) break; 39 mark=i; 40 } 41 for(int i=0;i<4;i++){ 42 for(int j=0;j<4;j++){ 43 if(b[i][j]==1) a[mark+i][n-1+j]=1; 44 } 45 } 46 for(int i=0;i<15;i++){ 47 for(int j=0;j<10;j++){ 48 printf("%d ",a[i][j]); 49 } 50 printf("\n"); 51 } 52 return 0; 53 }