the clocks 菜鸟做了两天....

#include<fstream>
#include<iostream>
using namespace std;
int main()
{
	int i,j,k=0,a[10],b[10];
	ifstream fin ("clocks.in");
	ofstream fout ("clocks.out");
	int move[10][10]={
		{0,0,0,0,0,0,0,0,0,0},
		{0,3,3,0,3,3,0,0,0,0},
		{0,3,3,3,0,0,0,0,0,0},
		{0,0,3,3,0,3,3,0,0,0},
		{0,3,0,0,3,0,0,3,0,0},
		{0,0,3,0,3,3,3,0,3,0},
		{0,0,0,3,0,0,3,0,0,3},
		{0,0,0,0,3,3,0,3,3,0},
		{0,0,0,0,0,0,0,3,3,3},
		{0,0,0,0,0,3,3,0,3,3}
	};//九个步骤对九个时钟产生的影响 
	int m[10];//保存使用九个步骤的次数,每步最多使用3次
	int clock[10];//保存原始的时钟状态
	int temp[10];//保存临时的时钟状态
	for(i=1;i<=9;i++)
		fin>>clock[i];
	for(m[1]=0;m[1]<=3;m[1]++)
		for(m[2]=0;m[2]<=3;m[2]++)
			for(m[3]=0;m[3]<=3;m[3]++)
				for(m[4]=0;m[4]<=3;m[4]++)
					for(m[5]=0;m[5]<=3;m[5]++)
						for(m[6]=0;m[6]<=3;m[6]++)
							for(m[7]=0;m[7]<=3;m[7]++)
								for(m[8]=0;m[8]<=3;m[8]++)
									for(m[9]=0;m[9]<=3;m[9]++)
									{
										for(i=1;i<=9;i++)//对于每个时钟,表示第i个时钟
										{
											temp[i]=clock[i];
											for(j=1;j<=9;j++)//相对于每个步骤产生的影响,表示第j个步骤
											{
												if(move[j][i]==3)
												{
													temp[i]=temp[i]+m[j]*3;
												}
											}
											temp[i]%=12;
										}
										for(i=1;i<=9;i++)
										{
											if(temp[i]!=0)
												break;
										}
										if(i>9)//i表示时钟
										{
											for(j=1;j<=9;j++)//j表示步骤
											{
												if(m[j]!=0)
												{
													a[++k]=m[j];//第j个步骤用了m[j]次
													b[k]=j;//用了第j个步骤
												}
											}
										//	fout<<k<<endl;
											//共用了k个步骤
										   for(i=1;i<k;i++)
										   {
											   for(j=1;j<=a[i];j++)
											      fout<<b[i]<<" ";
										   }
										   for(j=1;j<a[k];j++)
										      fout<<b[i]<<" ";
										   fout<<b[i]<<endl;
										}
										k=0;
                                     }
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值