Project Euler 32

其实今天期末第一天……不宜做题的……


但是由于今晚dota过猛……小鱼人杀得太爽了……所以……



其实这道题……蛮简单的……看了题目,我就想,似乎很难,结果前面多少题的经验果然是……直接暴力……

好么……我真是够暴力……

而且……一道小水题……真心不喜欢这样的题啊~为了题数……来吧……



这个题,让我怀想起了周恒当年教我们的“百钱买百鸡”问题。时隔多年啊……

#include <stdio.h>

int mul[10];
int
check()
{
	int i, j;
	for (i=0; i<4; i++)
		if (mul[i] == 0)
			return 0;
	for (i=0; i<4; i++)
		for (j=i+1; j<4; j++)
			if (mul[i] == mul[j])
				return 0;
	return 1;
}

int
main()
{
	int x1, x2, y, y_tmp, sum=0;
	int a, b, c, d, e;
	int *tmp;
	for (a=0; a<10; a++)
		mul[10] = 0;
	for ( a=1; a<10; a++)
		for ( b=1; b<10; b++)
			if (a!=b)
				for ( c=1; c<10; c++)
					if (c!=a && c!=b)
						for ( d=1; d<10; d++)
							if (d!=c && d!=a && d!=b)
								for ( e=1; e<10; e++)
									if (e!=d && e!=a && e!=b && e!=c)
									{
										x1 = a*10 + b;
										x2 = c*100 + d*10 + e;
										y = x1*x2;
										y_tmp = y;
										tmp = mul;
										while (y_tmp>0)
										{
											*tmp = y_tmp % 10;
											if (*tmp==a || *tmp==b || *tmp==c || *tmp==d || *tmp==e) 
											{
												y_tmp = -1;
												break;
											}
											y_tmp /= 10;
											tmp++;
										}
										if (y<9999 && y_tmp>=0 && check())
										{
											sum += y;
											printf("%d, %d, %d\n", x1, x2, y);
										}
										x1 = a;
										x2 = b*1000 + c*100 + d*10 + e;
										y = x1*x2;
										y_tmp = y;
										tmp = mul;
										while (y_tmp>0)
										{
											*tmp = y_tmp % 10;
											if (*tmp==a || *tmp==b || *tmp==c || *tmp==d || *tmp==e) 
											{
												y_tmp = -1;
												break;
											}
											y_tmp /= 10;
											tmp++;
										}
										if (y<9999 && y_tmp>=0 && check())
										{
											sum += y;
											printf("%d, %d, %d\n", x1, x2, y);
										}
									}
	printf("%d\n", sum);
	return 0;
}

真是……羞于上代码了……纯纯的暴力……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值