第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组

试题 A: 门牌制作
本题总分:5 分
在这里插入图片描述

代码:

#include<iostream>
using namespace std;
int main()
{
	int couter=0;
	for(int i=1;i<=2020;i++)
	{
		int a=i/1000;
		int b=i/100%10;
		int c=i/10%10;
		int d=i%10;
		if(a==2)
		couter++;
		if(b==2)
		couter++;
		if(c==2)
		couter++;
		if(d==2)
		couter++;
	}
	cout<<couter;
	return 0;
}

答案:
在这里插入图片描述

试题 B: 既约分数
本题总分:5 分
在这里插入图片描述

代码

#include<iostream>
using namespace std;

bool gcd (int i,int j)
{
		while(i!=j)
		{
			if(i>j)
			i=i-j;
			else if(j>i)
			j=j-i;
		 } 
		 if(i==1)
		return true;
		else
		return false;
}
int main()
{
	int couter=0;
	for(int i=1;i<=2020;i++)
	{
		for(int j=1;j<=2020;j++)
		{
			if(gcd(i,j))
			couter++;
		}
	}
	cout<<couter;
	return 0;
}

答案:

在这里插入图片描述

试题 C: 蛇形填数
本题总分:10 分
在这里插入图片描述

注意:只让求了20行20列的数,找到行数=列数时的数字规律即可,不需要求出全部的数。

代码:

#include<iostream>
using namespace std;

int main()
{
	int n;
	cin>>n;
	int sum=1;
	for(int i=1;i<=n;i++)
	{
		sum=sum+4*(i-1);
	}
	cout<<sum;
	return 0;
}

答案
在这里插入图片描述

试题 D: 跑步锻炼
本题总分:10 分
在这里插入图片描述

代码

#include<iostream>
using namespace std;
int main()
{
	int y=2000;
	int m=1,d=0,days;
	int sum=1;  //第一天跑两千米
	int week=5; //第一天是星期六 
	while(y!=2020 || m!=10 || d!=1)
	{
       if((y%4==0 && y%100!=0 )|| y%400==0) // 判断是否是闰年 
	   	days=366;
	   else
	   	days=365;
		d++;
		sum+=1;   //每天都跑1km 
	    week=(week+1)%7;
		if(week==1)   //周一多跑1km 
			sum+=1;
		if((m==2 && d==29 && days==366) || ( m==2 && d==28 && days==365))
		{
			m++;
			d=0;
			if(week!=1)
			sum+=1;
		}
		if( (m==1 || m==3 ||  m==5 ||  m==7 || m==8 || m==10) && d==31)
		{
		    m++;
		    d=0;
		    if(week!=1)
		    sum+=1;
		}
		if( (m==4 || m==6 ||  m==9 ||  m==11 )&& d==30)
		{
			m++;
			d=0;
			if(week!=1)
			sum+=1;
		}
		if(m==12 && d==31)
		{
			m=1;
			d=0;
			y++;
			if(week!=1)
			sum+=1;
		}
	}
	cout<<sum+2;  //2020年10月1日也跑了2km 
	return 0;
}

答案:
在这里插入图片描述

试题 E: 七段码
本题总分:15 分
在这里插入图片描述
在这里插入图片描述

代码:

答案:

试题 F: 成绩统计
时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分
在这里插入图片描述

在这里插入图片描述

代码:

#include<iostream>
using namespace std;

int main()
{
	int n,x;
	cin>>n;
	int jige=0,youxiu=0;
	for(int i=0;i<n;i++)
	{
		cin>>x;
		if(x>=60)
		{
		jige++;
	    }
		if(x>=85)
		{
		youxiu++;
	    }
	}
	int a=(jige*100)/n;
	int b=(youxiu*100)/n;
	if(jige*1000/n%10>=5)
	cout<<a+1<<"%"<<endl;
	else
	cout<<a<<"%"<<endl;
	if(youxiu*1000/n%10>=5)
	cout<<b+1<<"%";
	else
	cout<<b<<"%";
	return 0;
}

试题 G: 回文日期
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
在这里插入图片描述

在这里插入图片描述

代码:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string exp;
	cin>>exp;
	int y=(exp[0]-'0')*1000+(exp[1]-'0')*100+(exp[2]-'0')*10+exp[3]-'0';
	int m=(exp[4]-'0')*10+(exp[5]-'0');
	int d=(exp[6]-'0')*10+(exp[7]-'0');
	int days;
	int flag=1;
	while(1)
	{
       if((y%4==0 && y%100!=0 )|| y%400==0) // 判断是否是闰年 
	   	days=366;
	   else
	   	days=365;
		d++;
		if((m==2 && d==29 && days==366) || ( m==2 && d==28 && days==365))
		{
			m++;
			d=0;
		}
		if( (m==1 || m==3 ||  m==5 ||  m==7 || m==8 || m==10) && d==31)
		{
		    m++;
		    d=0;
		}
		if( (m==4 || m==6 ||  m==9 ||  m==11 )&& d==30)
		{
			m++;
			d=0;
		}
		if(m==12 && d==31)
		{
			m=1;
			d=0;
			y++;
		}
		if(flag==1 &&y/1000==d%10 && y/100%10==d/10 && y/10%10==m%10 && y%10==m/10)
		{
			flag=0;
			cout<<y;
			if(m<10)
			cout<<"0"<<m;
			else
			cout<<m;
			if(d<10)
			cout<<'0'<<d<<endl;
			else
			cout<<d<<endl;
	    }
		if(y/1000==d%10 &&  d%10==y/10%10  && y/10%10==m%10  && y/100%10==d/10 && d/10==y%10 && y%10==m/10)
		{
		    cout<<y;
			if(m<10)
			cout<<"0"<<m;
			else
			cout<<m;
			if(d<10)
			cout<<'0'<<d;
			else
			cout<<d;
		break;
	    }
	}  
	return 0;
}

试题 H: 子串分值和
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码:

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

int f(string exp)
{
	int len=exp.length();
	for(int i=0;i<exp.length();i++)
	{
		for(int j=i+1;j<exp.length();j++)
		{
			if(exp[i]==exp[j])
			{
				len--;
		    }
		}
	}
	return len;
}

int main()
{
	string exp;
	cin>>exp;
	int couter=0;
	for(int i=0;i<exp.length();i++)
	{
		for(int j=1;j<=exp.length()-i;j++)
		{
			string exp1;
			exp1=exp.substr(i,j); 
			couter+=f(exp1);
		}
	}
	cout<<couter;
	return 0;
}

试题 I: 平面切分
时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分
在这里插入图片描述
在这里插入图片描述

代码:

#include<iostream>
using namespace std;

int check(int jiaodian[],int cnt)
{
	int k=1;
	for(int i=0;i<cnt;i++)
	{
		for(int j=i+1;j<cnt;j++)
		{
			if(jiaodian[i]!=jiaodian[j])
            k++;			
		}
	}
	return k;
}

int main()
{
	int N;
	cin>>N;
	int i=0;
	int A[1005],B[1005];
	for(int i=0;i<N;i++)
	{
		cin>>A[i];
		cin>>B[i];
    }
	int couter=N+1;  //第一条直线把平面分成两部分 
	for(int i=1;i<N;i++)   //i=1,从第二条直线开始 
	{
		int jiaodian[10005];   //记录交点坐标 
		int cnt=0; 
		for(int j=0;j<i && j!=i;j++)  //每一条直线与前面直线的交点 
		{
			if(A[i]!=A[j])  //判断两直线斜率 
			{
				jiaodian[cnt]=(B[j]-B[i])/(A[i]-A[j]);  //记录交点横坐标 
				cnt++;
			}
			else 
			{
				couter--;
			    break;
			}
		}
		if(cnt!=0)   //去掉重合的线
		couter=couter+check(jiaodian,cnt);
	}
	cout<<couter;
	return 0;
}

注意:未找到OJ来判断代码正误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值