UVA10976摸鱼的暴力枚举初步.....


https://vjudge.net/problem/UVA-10976

我一开始的想法超时了......

其实想法也还好,里面有两个需要优化的地方.....

(1)通常做法是y<2*k

然后从k开始枚举的..  其实想一下也是,从二倍然后加加加

(2)我 的顺序反了-

完全不需要stack啊....  开两个数组存一下就好了,因为你免不了要输出sum,所以这个存储绕不开的

哪怕是y倒着开始... 或者 是什么的...

(3)暴力枚举....!!!  其实x不用枚举的,只要除法就好了

并且不会有精度损失!!!!!!!因为是int所以除得尽啊 .......多虑了

ac的代码

#include<iostream>
#include<stack>
using namespace std;


int main()
{
	int  k;
	while (cin >> k)
	{
		int a[1005], b[1005];
		int x;
		int i=0;
		/// 的确x可以怎么算...  但是y的确是在减小的啊= -
		// ...从k开始
		for (int y = k + 1; y <= 2 * k; y++)
		{//  k+1!!!k是肯定不行的!!!!!!!!!!!!!!!!!
			if ((k * y) % (y - k) == 0)//  判断条件就是这样了
			{
				x = (k*y) / (y - k);
				/// 再有.. 傻了 既然x是int那肯定可以除尽啊.....
				//关键是不用枚举x....
				a[i] = x;
				b[i] = y;
				i++;

			}
		}
		cout << i<< endl;
		for (int m= 0; m < i; m++)
			cout << "1/" << k << " = 1/" << a[m] << " + 1/" << b[m] << endl;
	}

	return 0;
}

///只要枚举y,然后找到符合条件的x就可以了,从顶向下找.....
/// 而不是,面向数据开始分析... orz
/// 从题目中来.. 从题目中枚举.... ///
//x*(y - k) == k*y;

//  倒序输出完全不是问题......但是这个方法似乎复杂了一倍= =
// sum完全不是问题... 用数组存一下就好了

然后超时的....

stack别看了吧= =只能说我  从x开始找大概也没错

数学啊,,, 还是多分析了的好

#include<iostream>
#include<stack>
using namespace std;


int main()
{
	double k;
	while (cin >> k)
	{
		stack<double>s;
		int cnt = 0;
		double x = 2 * k, y = 2 * k;
		while (x <= k*k + k)
		{

			for (y = x; y > 0; y--)
				/// 据说 会有精度损失?= =....  这是枚举?....
				// 多用算法的思想考虑问题..... 
				//要枚举...  而不是自己找...让计算机帮你找,它不怕一个一个一个的找的 
			{
				if (x*y == k*x + k*y)
				{
					cnt++; 
					
					s.push(y); s.push(x);
					//cout <<"1/"<<k<< " = 1/" << x << " + 1/" << y << endl;
					x += 2;///什么时候有2,什么时候煤油???接班素养!!!
					
					continue;
				}
				
			}
			x += 2;
		}
		cout << cnt << endl;
		while (!s.empty())
		{
			cout << "1/" << k << " = 1/" << s.top();
			s.pop();
			cout <<  " + 1/" <<s.top() << endl;
			s.pop();
		}

	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值