杭电oj2000-2099难点记录

T2028 Lowest Common Multiple Plus——最大公约数

主要是记录求最大公约数的方法,多个数字的最大公约数就是用遍历不断求两个数的最大公约数

#include <iostream>
using namespace std;

long long lcm(long long x, long long y)
{
   
	long long a = 0, b = 0;
	long long temp = 0;
	if (x < y)
	{
   
		temp = x;
		x = y;
		y = temp;
	}
	a = x * y;
	while (y != 0)
	{
   
		b = x % y;
		x = y;
		y = b;
	}
	return a / x;
}

int main()
{
   
	int n;
	long long a, b;
	while (cin >> n)
	{
   
		cin >> a;
		for (int i = 0; i < n - 1; i++)
		{
   
			cin >> b;
			a = lcm(a, b);
		}
		cout << a << endl;
	}
	return 0;
}

T2030 汉字识别——汉字内码特性

汉字内码由两个字节组成,且最高位为1
因此可以识别连续的两个字节且为负,即为一个汉字

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

int main()
{
   
	int n;
	cin >> n;
	string str;
	getline(cin, str);
	while (n--)
	{
   
		getline(cin, str);
		int num = 0;
		int flag = 0;
		for (int i = 0; i < str.length(); i++)
		{
   
			if (str[i] < 0)
				flag++;}
			else
				flag = 0;
			if (flag == 2)
			{
   
				flag = 0;
				num++;
			}
		}
		cout << num << endl;
	}
	return 0;
}

T2036 改革春风吹满地——多边形公式

多边形公式:0.5*|(x1y2-y1x2)+(x2y3-y2x3)+……+(xny1-ynx1)|

#include <iostream>
using namespace std;

int main()
{
   
	int n;
	int x1, y1, xn1, yn1, xn2, yn2;
	int sum = 0;
	double ans;
	while (cin >> n && n)
	{
   
		cin >> xn1 >> yn1;
		x1 = xn1;
		y1 = yn1;
		sum = 0;
		for (int i = 0; i < n - 1; i++)
		{
   
			cin >> xn2 >> yn2;
			sum += (xn1*yn2 - yn1 * xn2);
			xn1 = xn2;
			yn1 = yn2;
		}
		sum += (xn2*y1 - yn2 * x1);
		ans = abs(sum) * 1.0 / 2;
		printf("%.1f\n", ans);
	}
	return 0;
}

T2037 今年暑假不AC——区间贪心

考点是区间贪心,目标是看尽可能多的电视节目

  • 对电视节目进行排序
  • 首先按照节目开始的时间从大到小排序
  • 其次如果节目开始的时间相同,则优先考虑结束时间早的,代表电视节目时间段短,满足看尽可能多电视节目的需求,优先考虑就是在排序的时候将其排到前面
  • 这样从第一个开始,往后选择第一个电视节目结束时间在该节目开始时间之前的即可
#include <iostream>
using namespace std;
#include <algorithm>

struct show
{
   
	int start;
	int end;
}show[110];

bool cmp(struct show a,struct show b)
{
   
	if (a.start != b.start)
		return a.start > b.start;
	else
		return a.end < b.end;
}

int main()
{
   
	int n;
	while (cin >> n && n)
	{
   
		for (int i = 0
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值