View Code of Problem 10

#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.


Back to problem 10