SMU Winter(div.2)4

1.P8706 [蓝桥杯 2020 省 AB1] 解码 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:输入字符串,里面包含字母和数字,这个数字表示字母有几个,但数字最多不能超过9.要求输出所有字母。

#include
using namespace std;
int main(){
	string s; cin>>s;
	for(int i=0;i'0'&&s[i]<='9'){
			for(int j=0;j

2.P8717 [蓝桥杯 2020 省 AB2] 成绩分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:计算这次考试的最高分、最低分和平均分。

#include
using namespace std;
int main(){
	int n; cin>>n;
	int a[n];
	int maxn=-1,minn=101,sum=0;
	for(int i=0;i>a[i];
		maxn=max(maxn,a[i]);
		minn=min(minn,a[i]);
		sum+=a[i];
	}
	double ans = sum*1.0/n*1.0;
	cout<

3.P8711 [蓝桥杯 2020 省 B1] 整除序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:有一个序列,序列的第一个数是 n,后面的每个数是前一个数整除 2,输出这个序列中值为正数的项。

#include


using namespace std;
typedef long long ll;


int main(){
	ll n;
	cin>>n;
	while(n>0){
		cout<

4.P8722 [蓝桥杯 2020 省 AB3] 日期识别 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:输入一段字符串,输出它表达的日期。

#include
#include
using namespace std;
int main(void){
    string str = "JanFebMarAprMayJunJulAugSepOctNovDec";
    int len = (int)str.size();
    string s;
    string str1 ="0";

while(cin>>s){
        int count =0;
        for(int i = 0;i

5.P8716 [蓝桥杯 2020 省 AB2] 回文日期 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:输入一个回文日期,输入它后面两个回文日期。abcddcba式


#include
using namespace std;
int main(){
	int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	int n;
	cin>>n;
	string s=to_string(n);
	int y=n/10000;
	int m=n/100%100;
	int d=(s[6]-'0')*10+s[7]-'0';
	if(y%4==0&&y%100!=0||y%400==0)month[2]=29;
	if(d+1>month[m]){
		d=1;
		m=(m+1)%12;
	}
	else d+=1;
    //用来标记是否找到回文日期和ABABBABA型的回文日期
	bool flag1=false,flag2=false;
	int ans1,ans2;
	while(1){
		if(flag1&&flag2)break;//找到跳出循环
        //天数加一
		if(y%4==0&&y%100!=0||y%400==0)month[2]=29;
		else month[2]=28;
		d++;
		if(d>month[m]){
			d=1;
			m++;
			if(m>12){
				m=1;
				y++;
			}
		}
        //判断
		string s=to_string(y);
		reverse(s.begin(),s.end());	
		int mon=(s[0]-'0')*10+s[1]-'0';
		int day=(s[2]-'0')*10+s[3]-'0';
		if(mon==m&&day==d){
			if(!flag1){
				flag1=true;
				ans1=y*10000+m*100+d;
			}
			if(d==m){
				flag2=true;
				ans2=y*10000+m*100+d;
			}
		}
		
	}
	cout<

6.P8720 [蓝桥杯 2020 省 B2] 平面切分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:平面上有 N 条直线,其中第 i 条直线是 y = Ai x + Bi ,计算这些直线将平面分成了几个部分。

分析:x条直线将平面分成sum个部分,加入第i条直线sum增加个数=第i条直线与前i-1条直线交点个数+1。

#include
using namespace std;
const int N = 1005;
 
int main()
{
	int n;
	scanf("%d", &n);
	int a, b;
	long double A[N], B[N];
	pair p; 
	set > s;  //利用set自动去重功能筛选掉重边 
	for(int i = 0; i < n; i++)
	{
		scanf("%d %d", &a, &b);
		p.first = a;
		p.second = b;
		s.insert(p);
	}
	int i = 0;  //将去重后的直线数据放回A,B数组 
	for(set >::iterator it = s.begin(); it != s.end(); it++, i++)
	{
		A[i] = it -> first;
		B[i] = it -> second;
	}
	long long ans = 2;  //初始情况当只有一条直线时,有两个平面 
	for(int i = 1; i < s.size(); i++)  //从下标1开始,也就是第二条直线 
	{
		set > pos;  //记录第i条直线与先前的交点 
		for(int j = i-1; j >= 0; j--)
		{
			int a1 = A[i], b1 = B[i];
			int a2 = A[j], b2 = B[j];
			if(a1 == a2)  //遇到平行线无交点,跳出 
				continue; 
			p.first = 1.0*(b2-b1)/(a1-a2);
			p.second = 1.0*a1*((b2-b1)/(a1-a2)) + b1;
			pos.insert(p); 
		}
		ans += pos.size() + 1;

	printf("%d\n", ans);
	return 0;
}

7.P8707 [蓝桥杯 2020 省 AB1] 走方格 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:在平面上有一些二维的点阵,从上到下依次为第 1 至第n 行,从左到右依次为第 1 至第 m列,现在有个人站在第 1 行第 1 列,要走到第n行第m列,只能向右或者向下走,输出有几种走法

#include
using namespace std;

const int N = 35;
int dp[N][N];
int n,m;

int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)dp[i][1]=1;
    for(int j=1;j<=m;j++)dp[1][j]=1;
    
    for(int i=2;i<=n;i++)
    {
        for(int j=2;j<=m;j++)
        {
            if(i%2==0&&j%2==0)dp[i][j]=0;
            else dp[i][j]=dp[i-1][j]+dp[i][j-1];
        }
    }
    
    cout<

8.P8723 [蓝桥杯 2020 省 AB3] 乘法表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:输入数字n,并输出转化为n进制的n行乘法表

#include 
#include 
using namespace std;

int P;
char w[36];

string change(int n)
{
    string s;
    while(n)
    {
        s += w[n % P];
        n /= P;
    }
    reverse(s.begin(), s.end());//颠倒顺序
    return s;
}

int main()
{
    cin >> P;
    
    for (int i = 0; i <= 9; i ++) w[i] = (char)('0' + i);
    for (int i = 10; i <= 35; i ++) w[i] = (char)('A' + i - 10);
    
    for (int i = 1; i < P; i ++)
    {
        for (int j = 1; j <= i; j ++) cout << w[i] << '*' << w[j] << '=' << change(i * j) << ' ';
        cout << endl;
    }
    
    return 0;
}

你可能感兴趣的:(蓝桥杯,算法,c++)