蓝桥杯2020

门牌制作

模拟

#include<iostream>
using namespace std;

int main()
{
	int a[10] = {0}; 
    for(int i = 1 ; i <= 2020 ; i++ )
    {
    	int k = i;
    	while(k)
    	{
    		//cout << k % 10 << endl;
    		a[k % 10]++;
    		k /= 10;
		}
	}
    cout << a[2];    
    return 0;
}

既约分数

gcd 模拟

#include <iostream>
using namespace std;

int gcd(int a, int b)
{
	return b?gcd(b, a % b):a;
}

int main()
{
	int sum = 0;
	for (int i = 1; i <= 2020; i++)
	{
		for (int j = 1; j <= 2020; j++)
		{
			if (gcd(i, j) == 1)
			{
				sum++;
			}
		}
	}
	cout << sum;
	return 0;
} 

蛇形填数

算一下

#include <iostream>
using namespace std;

int main()
{
	cout << 761;
	return 0;
}

七段码

算一下

#include <iostream>
using namespace std;

int main()
{
	cout << 80 << endl;
	return 0;
}

跑步训练

#include<iostream>
using namespace std;

int main() {
	int weekday = 5, sum = 0;
	for (int i = 2000; i <= 2019; i++)
	{
		int flag = 1;     
		if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) flag = 0;
		int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
		if (!flag) a[1] = 29;
		for (int j = 1; j <= 12; j++) {
			for (int k = 1; k <= a[j - 1]; k++) 
    {
				weekday++;
				if ((weekday == 1 && k != 1) || (weekday != 1 && k == 1) || (weekday == 1 && k == 1)) sum += 2;
				else sum++;
				if (weekday == 7) weekday = 0;
			}
		}
	}
	//2020年 
	int b[9] = { 31,29,31,30,31,30,31,31,30 };
	for (int i = 1; i <= 9; i++)
    {
		for (int k = 1; k <= b[i - 1]; k++) 
        {
			weekday++;
			if ((weekday == 1 && k != 1) || (weekday != 1 && k == 1) || (weekday == 1 && k == 1)) sum += 2;
			else sum++;
			if (weekday % 7 == 0) weekday = 0;
		}
	}
	sum += 2;
	cout << sum;
}

成绩统计

#include <iostream>
using namespace std;

int main()
{
	int n, s;
	cin >> n;
	int sum1 = 0, sum2 = 0;
	for (int i = 0; i < n; i++)
	{
		cin >> s;
		if (s >= 60) sum1++;
		if (s >= 85) sum2++; 
	}
	int a, b;
	if ((double)sum1 / n * 100 - (int)((double)sum1 / n * 100) >= 0.5) a = (int)((double)sum1 / n * 100) + 1;
	else a = (int)((double)sum1 / n * 100);
	if ((double)sum2 / n * 100 - (int)((double)sum2 / n * 100) >= 0.5) b = (int)((double)sum2 / n * 100) + 1;
	else b = (int)((double)sum2 / n * 100);
	cout << a << "%" << endl << b << "%" << endl;
	return 0;
}

回文日期

 

 一个对一个错

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

bool c1(int n3, int n4)
{
	int t;
	if (n4 / 100 == 1 || n4 / 100 == 3 || n4 / 100 == 5 || n4 / 100 == 7 || n4 / 100 == 8 || n4 / 100 == 10 || n4 / 100 == 12)
	{
		t = 31;
	}
	else if (n4 / 100 == 4 || n4 / 100 == 6 || n4 / 100 == 9 || n4 / 100 == 11)
	{
		t = 30;
	}
	else if (n3 % 400 == 0 || (n3 % 100 != 0 && n3 % 4 == 0) && n4 / 100 == 2)
	{
		t = 29;
	}
	else
	{
		t = 28;
	}
	//cout << t << " " << n4 / 100 << " " << n4 % 100 << " ";
	if (n4 / 100 <= 12 && n4 % 100 <= t && n4 / 100 >= 1 && n4 % 100 >= 1)
	{
		return true;
	}
	return false;
}

int q(int n3)
{
	return n3 % 10 * 1000 + n3 / 10 % 10 * 100 + n3 / 100 % 10 * 10 + n3 / 1000 % 10;
}

bool c2(int n)
{
	if (q(n / 10000) == n % 10000)
	{
		return true;
	}
	return false;
}

bool c3(int n)
{
	if (n / 1000000 == n % 1000000 / 10000 && n / 1000000 / 10 != n / 1000000 % 10)
	{
		return true;
	}
	return false;
}

//int n3;
//n3 = n1;
//int n4;
//n4 = n3 % 10 * 1000 + n3 / 10 % 10 * 100 + n3 / 100 % 10 * 10 + n3 / 1000 % 10;
//int n5 = n / 1000000;
//int n6 = n5 / 10 + n5 % 10 * 10;
//n3 = n5 * 1000000 + n5 * 10000 + n6 * 100 + n6;

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		string s;
		cin >> s;
		int a[10];
		for (int i = 0; i < 8; i++)
		{
			a[i] = s[i] - '0';
		}
		int n = 0, p = 1;
		for (int i = 7; i >= 0; i--)
		{
			n += a[i] * p;
			p *= 10;
		}
		int n1, n2, n3, n4;
		n1 = n / 10000;
		int flag1 = 0, flag2 = 0;

		//cout << n1 << " " << q(n1) << " ";
		if (n1 * 10000 + q(n1) > n && c1(n1, q(n1)))
		{
			flag1 = 1;
			n3 = n1 * 10000 + q(n1);
			if (c3(n3))
			{
				flag2 = 1;
				n4 = n3;
			}
		}
		n1++;
		while (1)
		{
			n2 = q(n1);
			if (c1(n1, n2) && flag1 == 0)
			{
				if (c2(n1 * 10000 + n2) && n1 * 10000 + n2 != n)
				{
					n3 = n1 * 10000 + n2;
					flag1 = 1;
				}
			}
			if (c1(n1, n2) && flag2 == 0)
			{
				if (c2(n1 * 10000 + n2) && c3(n1 * 10000 + n2) && n1 * 10000 + n2 != n)
				{
					n4 = n1 * 10000 + n2;
					flag2 = 1;
				}
			}
			if (flag1 == 1 && flag2 == 1)
			{
				break;
			}
			n1++;
		}
		cout << n3 << endl << n4 << endl;
	}
	return 0;
}

子串分值和

对于字符串s中的每一个字符,对这个字符左右分别求左边右边包含它的子串个数和,保存上一次该子串在的位置防止重复求子串个数

#include<iostream>
using namespace std;
int last[26];

int main(){
	string s;
	cin >> s;
	int len = s.size();
	s = "0" + s;
	long long int ans=0;
	for(int i = 1; i < s.size(); i++)
    {
		ans += (i - last[s[i]-'a']) * (len - i + 1);
		last[s[i]-'a'] = i;
	}
	cout << ans;
	return 0;
}

平面切分

set 不充分的切线加入 不重复的切线加入会增加一个面 再求有多少交点加上交点数

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

typedef pair<double, double> k;
set<k> l;
int res = 1;
 
int cmp(double c, double d)
{
	set<k> p;
	k t;
	for (auto i = l.begin(); i != l.end(); i++)
	{
		double a = i->first;
		double b = i->second;
		if (a != c)
		{
			t.first = (d - b) / (a - c);
			t.second = c * t.first + d;
			p.insert(t);
		}
	}
	return p.size();
}
 
int main()
{
	int n;
	cin >> n;
	while (n--)
	{
		double a, b;
		cin >> a >> b;
		int t1 = l.size();
		l.insert({ a,b });
		if (l.size() != t1)
		{
			res++;
			res += cmp(a, b);
		}
    }
	cout << res << endl; 
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值