#include <iostream> #include <cstring> using namespace std; //void digui(int a[],int n){ // int flag=0; // if(n==1) // return ; // if(a[n]==0){ // for(int i=n;i>=1;i--){ // a[i]=a[i-1]; // } // if(a[n-1]!=0){ // n++; // } // } // // digui(a,n-1); //} void fun(int b[],int t){ for(int j=0;j<t;j++){ for(int i=0;i<t;i++){ if(b[i]!=0&&b[i+1]==0){ b[i+1]=b[i]; b[i]=0; } } } } int main() { //思路:本质是一个向右移动格子的行为 //向右搬动的时候,如果当前数和右边数相同,则相加 int t; cin>>t; for(int i=0;i<t;i++) { int a[5]={0}; memset(a,0,sizeof(a)); for(int i=1;i<=4;i++) { cin>>a[i]; } for(int i=4;i>=1;i--){ for(int k=i-1;k>=1;k--) if(a[i]==a[k]&&a[i]!=0){ //出现相等 a[i]*=2; a[k]=0; } } fun(a,4) ; cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<" "<<a[4]<<endl; } return 0; } |
Double click to view unformatted code.