蓝桥杯校赛自己的代码

问题描述
  请问十六进制数1949对应的十进制数是多少?请特别注意给定的是十六进制,求的是十进制。
答案提交 6473
 
问题描述
  70044与113148的最大公约数是多少?
答案提交 5388

问题描述
  在1至2019中,有多少个数的数位中包含数字9?
  注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算只是算一个数。
答案提交 544
  
问题描述
  一棵包含有2019个结点的树,最多包含多少个叶结点?
答案提交 2018

5  给定一个单词,请使用凯撒密码将这个单词加密。
  凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文。即a变为d,b变为e,…,w变为z,x变为a,y变为b,z变为c。
  例如,lanqiao会变成odqtldr。
输入格式
  输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
  输出一行,表示加密后的密文。
样例输入
lanqiao
样例输出
odqtldr
评测用例规模与约定
  对于所有评测用例,单词中的字母个数不超过100。

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
	char a[105],b[105];
	gets(a);
	int i;
	for(i=0;a[i]!='\0';i++)
	{
		if(a[i]>='x'&&a[i]<='z') b[i]=a[i]-23;
		else b[i]=a[i]+3;
	}
	b[i]='\0';
	for(int i=0;b[i]!='\0';i++)
	{
		cout<<b[i];
	}
	return 0;
} 

6  输入一个单词,请输出这个单词中第一个出现的元音字母。
  元音字母包括 a, e, i, o, u,共五个。
输入格式
  输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
  输出一行包含一个字母,为单词中第一个出现的元素字母。若单词中不存在元音字母,输出字母n。
样例输入
hello
样例输出
e
样例输入
fly
样例输出
n
评测用例规模与约定
  对于所有评测用例,单词中的字母个数不超过100。

 #include <iostream>
#include <string.h>
using namespace std;
int main()
{
	char a[105];
	gets(a);
	int i,f=1;
	for(i=0;a[i]!='\0';i++)
	{
		if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u')
		{
			cout<<a[i];
			f=0;
			break;
		 } 
	}
	if(f) cout<<'n';
	return 0;
} 

7  小明非常不喜欢数字 2,包括那些数位上包含数字 2 的数。如果一个数的数位不包含数字 2,小明将它称为洁净数。
  请问在整数 1 至 n 中,洁净数有多少个?
输入格式
  输入的第一行包含一个整数 n。
输出格式
  输出一行包含一个整数,表示答案。
样例输入
30
样例输出
18
评测用例规模与约定
  对于 40% 的评测用例,1 <= n <= 10000。
  对于 80% 的评测用例,1 <= n <= 100000。
  对于所有评测用例,1 <= n <= 1000000。

  #include<bits/stdc++.h>
using namespace std;
typedef long long LL;

int digit[20]; //储存上界的每个数位 
LL dp[20];  //统计没有2的总数 

LL dfs(int len, bool limit){
    if(len==0) return 1ll;  //个位的时候,有一个分支。 
    if(!limit && dp[len])  return dp[len];
    //没到达上界并且数位已经统计过,直接返回数量。 
    
    LL cnt=0,up_bound=(limit?digit[len]:9);
    //标记数位的上界 
    
    //对整个数位进行记忆化搜索 
    for(int i=0;i<=up_bound;++i){
        if(i==2) continue;//碰到2不加入。
        cnt+=dfs( len-1,limit && i==up_bound);
        //向下搜索上一位是否到达上界,当前位是否到上界。 
    } 
    if(!limit) dp[len]=cnt; //到达上界是状态不完整,不更新dp 
    return cnt;//直接返回本次搜索结果,加入到最后结果中 
}

LL solve(LL num) //num是上界这个数 
{
    int k=0;//记录数位个数。
    while(num)
    {
        digit[++k]=num%10;
        num/=10; 
    } 
    return dfs(k,true); 
} 

int main(){
	LL n;
    cin>>n;
    cout<<solve(n)-1<<endl;
    return 0;
}

9 问题描述
  给定一个序列 a_1, a_2, …, a_n。其中 a_1 是最大的数,没有其他数与 a_1 相等。
  对于从第二个数开始的每个数 a_i,请找到位置在 a_i 之前且比 a_i 大的,位置上距离 a_i 最近的数 a_j。称 i-j 为 a_i 的前向距离。
  对于给定的序列,请求出所有数的前向距离之和。
输入格式
  输入的第一行包含一个整数 n,表示序列的长度。
  第二行包含 n 个正整数,为给定的序列。
输出格式
  输出一个整数,表示序列中所有数的前向距离之和。
样例输入
8
9 1 3 5 2 7 6 3
样例输出
14
样例说明
  序列中从第二项开始的前向距离依次为:
  1, 2, 3, 1, 5, 1, 1
  和为14。
数据规模和约定
  对于70%的评测用例,1 <= n <= 1000;
  对于所有评测用例,1 <= n <= 100000,a_1 <= 1000000。

#include <iostream>
#include <algorithm>  
#include <iomanip> 
#include <stack>
using namespace std;
typedef long long int ll; 
struct point{
 ll a;
 ll g;
} p[100005];

int main()
{
	stack<ll> s;
	ll n,d[100005],ans=0;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>p[i].a;
		d[p[i].a]=i;
		p[i].g=1;
		if(s.empty()||p[i].a<s.top())
		{
			s.push(p[i].a);
		}	
		while(p[i].a>s.top())
		{
			p[i].g+=p[d[s.top()]].g;
			s.pop();	
		}
		if(p[i].a<s.top()) s.push(p[i].a);
		ans+=p[i].g;
	}
	cout<<ans-1;
	
	return 0;
}

10问题描述
  受大西线调水工程启发,小明也准备设计一条调水的水渠。
  小明经费有限,他只能在一块有限区域内建立一条简单的水渠。
  小明首先勘探了地形,在这块地中有一处水源,必须用作水渠的起点。另外,小明还测量了一些点,包括点的位置和高度。如果两个小明测量的点之间的距离不超过 d 且高度不同,小明就可以在这两点之间建立一段水渠,让水从高处流向低处,这一段的长度为两点之间的直线距离(即将横坐标的差的平方加上纵坐标的差的平方加上高度差的平方后再开平方根)。
  小明计划只修一条主水渠,不建立分支的水渠。由于水渠能影响的范围与水渠的长度正相关,小明希望水渠尽可能长。
  请注意,水渠必须从水源开始修,并且高度应当递减。水渠的不同段可能交叉(建个桥即可)。
输入格式
  输入的第一行包含一个整数 n ,表示小明已经测量的点数。
  接下来 n 行,每行三个整数 x, y, h,分别表示测量的点坐标为 (x, y),高度为 h。这部分的第一个点即为水源,第一个点的h值大于其他点的h值。
  接下来一行包含一个整数 d。
输出格式
  输出一行,包含一个实数,四舍五入保留 2 位小数,表示水渠最长能修多长。
样例输入
5
1 1 10
2 3 8
4 5 9
1 2 5
4 5 5
8
样例输出
10.66
样例说明
  在这些点中有两个坐标为 (4, 5) 的点,这是允许的。
评测用例规模与约定
  对于 30% 的评测用例,1 <= n <= 10;
  对于 60% 的评测用例,1 <= n <= 20;
  对于所有评测用例,1 <= n <= 1000,0 <= h <= 10000,0 <= x, y <= 10000,0 < d < 1e7(10的7次方)。
C++

#include <iostream>
#include <algorithm>  
#include <math.h>
#include <iomanip> 
using namespace std;
typedef long long int ll; 
struct point{
	ll x;
	ll y;
	ll h; 
} p[1005];
bool cmp(point a,point b)
{
	return a.h>b.h;
}
int main()
{
	int n,d,i,l;
	double ans=0;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>p[i].x>>p[i].y>>p[i].h;
	}
	cin>>d;
	l=i;
	sort(p+1,p+l,cmp);
	int x,y,h;
	x=p[0].x, y=p[0].y,h=p[0].h;
	for(i=1;i<n;i++)
	{	
		double t,tt,s,ss;
		if(p[i].h<h) 
		{
			t=(double)((x-p[i].x)*(x-p[i].x)+(y-p[i].y)*(y-p[i].y)+(h-p[i].h)*(h-p[i].h));
			s=sqrt(t);
			tt=(double)((x-p[i].x)*(x-p[i].x)+(y-p[i].y)*(y-p[i].y));
			ss=sqrt(tt);
			while(p[i].h==p[i+1].h)
			{	
				i++;
				double s1;
				t=(double)((x-p[i].x)*(x-p[i].x)+(y-p[i].y)*(y-p[i].y)+(h-p[i].h)*(h-p[i].h));
			 	s1=sqrt(t);
			 	if(s1>s) 
				{
					s=s1;
			 		tt=(double)((x-p[i].x)*(x-p[i].x)+(y-p[i].y)*(y-p[i].y));
			 		ss=sqrt(tt);	
				 }
			}
			ans+=ss;
			x=p[i].x, y=p[i].y, h=p[i].h;
		}
		else continue;
	}
	cout<<setiosflags(ios::fixed)<<setprecision(2);
	cout<<ans<<endl;
	return 0;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值