uva725除法uva11059最大乘积uva10976分数拆分(暴力求解法)

原题链接:

725:  

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=666

11059:   

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2000

10976:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1917


725:

利用 被除数 和 商 求除数。检测被除数与除数是否符合要求。注意换行问题与循环范围。O(n)

11059:

注意大小,用longlong。 不需要建二维数组(详见代码)。O(n^2)(也可dp    O(n))

10976:

易得出 循环范围为  k+1  到 2*k 。利用y和k求x,判断x是否是整数。O(n)


代码如下:

725

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
int n;
bool P;		//标记是否存在满足要求的
bool check(int x, int y)	//检测0-9是否都有
{
	bool p[10];
	int z,k=y;
	memset(p, 0, sizeof(p));
	while (x)
	{
		z = x % 10;
		if (p[z])
			return false;
		p[z] = true;
		x /= 10;
	}
	while (y)
	{
		z = y % 10;
		if (p[z])
			return false;
		p[z] = true;
		y /= 10;
	}
	if (k < 10000)
		p[0] = true;
	for (int i = 0; i < 10;i++)
	if (!p[i]) return false;
	return true;
}
void solve()
{
	double j;
	for (int i = 12345; i <= 98765; i++)
	{
		j = i*1.0 / n;
		if ((int)j==j&&check(i,(int)j))		//需判断j是否为整数
		{
				cout << i << " / ";
				if (j < 10000)
					printf("%05d", (int)j);//不到10000补0,也可用c++(比较麻烦)
				else cout << j;
				cout << " = " << n << endl;
				P = false;
		}
	}
}
int main()
{
	bool o = false;
	while (cin >> n&&n)
	{
		if (o)		//注意换行问题
			cout << endl;	
		else o = true;
		P = true;
		solve();
		if (P)
			cout << "There are no solutions for "<<n<<"." << endl;
	}
	return 0;
}

11059

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
int number[20];
int main()
{
	int n;
	int k = 0;
	while (cin >> n)
	{
		long long  max = 0;	//long long
		for (int i = 1; i <= n; i++)
			cin >> number[i];
		int begin, end;		
		for (begin = 1; begin <= n; begin++)
		{
			long long tempsum = 1, sum = 1;		//long  long  以及赋值为1
			for (end = begin; end <= n; end++)
			{
				sum= tempsum* number[end];
				if (sum> max)
					max = sum;
				tempsum = sum;	//勿忘更新tempsum的值
			}
				
		}
		cout << "Case #" << ++k << ": The maximum product is " << max << "." << endl << endl;
	}
	return 0;
}

10976

#include<iostream>
#include<cstdio>
using namespace std;
int X[10000 + 10];
int Y[10000 + 10];
int main()
{
	int k;
	while (cin >> k)
	{
		int sum = 0;
		for (int y = k + 1; y <= 2 * k; y++)
		{
			double x = k*y*1.0 / (y-k);
			if ((int)x == x)
			{
				X[sum] = x;
				Y[sum] = y;
				sum++;
			}
		}
		cout << sum << endl;
		for (int i = 0; i < sum;i++)
		cout << "1/" << k << " = 1/" << X[i] << " + 1/" << Y[i] << endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值