莆田市第四期选拔模拟赛(答案)

平台:首页 - 莆田二中信息学竞赛在线评测系统 (ptezoj.com)

比赛>>莆田市第四期选拔模拟赛>>在题库中打开。

一、进制转换:

题目描述

我们给定一个数 �a ,我们需要把它转换为二进制的形式,但是 小Z 很调皮,它把转换后的二进制串反转了过来,并且把二进制串每一位上面的 00 改成 11 ,11 改成 00 了,现在请你求出 小Z 处理过后的二进制串。

十进制整数转换为二进制整数采用"除2取余,逆序排列"法。

输入格式

共一行,一个数字a 。

输出格式

输出 小Z 处理过后的二进制串。

样例

输入数据 1

13

输出数据 1

0100

样例解释

13 -> 1101 -> 1011 -> 0100

数据规模与约定

对于 100%100% 的数据保证:1≤≤1061≤a≤106。

okk,不讲废话,直接送代码。

#include<bits/stdc++.h>
using namespace std;
int a[10000000],i;
int main(){
    int n;
    cin>>n;
    while(n!=1){
        if(n%2==0) a[i]=1;
        else a[i]=0;
        i++;
        n/=2;
    }
    for(int j=0;j<=i;j++){
        cout<<a[j];
    }
    return 0;
}
//闭眼过。

二、矩形坐标:

题目描述

我们在 x-y 轴坐标系上给出三个点的坐标 xi​ , yi​ ,为一个矩形的三个顶点(保证矩形的边与坐标轴平行),现在请你求出矩形的第四个顶点的坐标。

输入格式

共三行,给出矩形三个顶点的坐标 xi​ , yi​ 。

输出格式

输出这个矩形第四个顶点的坐标。

样例

输入数据 1

1 1
2 2
2 1

输出数据 1

1 2

数据规模与约定

对于 100%100% 的数据保证: 1≤xi,yi≤10001≤xi​,yi​≤1000 。

还是那句话:直接送代码!

#include<bits/stdc++.h>
using namespace std;
int x_1,y_1;
int x_2,y_2;
int x_3,y_3;
int x_4,y_4;
int main(){
	cin>>x_1>>y_1;
	cin>>x_2>>y_2;
	cin>>x_3>>y_3;
	if(x_1==x_2) x_4=x_3;
	else if(x_1==x_3) x_4=x_2;
	else x_4=x_1;
	if(y_1==y_2) y_4=y_3;
	else if(y_1==y_3) y_4=y_2;
	else y_4=y_1;
	cout<<x_4<<" "<<y_4;
    return 0;
}
//应该傻子都会。

三、组队问题:

题目描述

某学校举行了一场比赛,该场比赛需要大家组队参加,每个队伍需要 2 名 A类选手 和 1 名 B类选手组成,但是由于规模限制,学校必须在比赛前淘汰k 名选手,我们想知道最多能有多少支队伍能够参加这场比赛?

输入格式

共一行,给出A类选手数量 m ,B类选手数量n ,必须淘汰的选手数 k 。

输出格式

输出该场比赛最多有多少支队伍。

样例

输入数据 1

6 10 3

输出数据 1

3

数据规模与约定

对于 100%100% 的数据保证: 0≤n,m≤100,0≤k≤n+m 。

代码来啦!

#include<cstdio>
int a,b,k; 
int main(){
	scanf("%d%d%d",&a,&b,&k);
	for(int i=(a+b-k)/3;~i;i--)
		if(a>=2*i&&b>=i)
			return !printf("%d",i);
}
//还比较难。

四、ZCX的数字

题目描述

我们定义一个正整数的位数为 k 的倍数 ,且每一位都是 99 的数字为 k 阶 "ZCX" 数。

现在我们要问你T 个问题,我们每次给出两个正整数n,k ,请你告诉 小Z 能不能把正整数n 拆分成若干个k 阶 "ZCX" 数的和。

如果可以拆分请输出 1 ,不可以请输出 0 。

输入格式

第 11 行输入数字 �T 表示询问次数

第 22 行 到T+1 行,每行给出两个数n,k 。

输出格式

如果正整数n 可以拆分成 �k 阶 "ZCX" 数 请输出 11 ,不可以请输出 00 。

样例

输入数据 1

3
9999 1
9999 2
9999 3

输出数据 1

1
1
0

数据规模与约定

对于 50%50% 的数据保证:1≤T≤1000,1≤n≤106,k=1 。

对于 100%100% 的数据保证:1≤T≤1000,1≤n≤1011,1≤k≤10 。

 来啦!

#include<cstdio>
long long t,n,k,s;
int main(){
	scanf("%d",&t);
	for(;t--;){
		scanf("%lld%lld",&n,&k);
		for(s=0;k--;)s=s*10+9;
		puts(n%s?"0":"1");
	}
	return 0;
}
//还行。

五、开关门 :

题目描述

酒店里有 n 个关着的房间,从 1 到n 编了号,第一个服务员把所有的房间门都打开了,第二个服务员把所有 编号是 2 的倍数的房间“相反处理”,第三个服务员把所有编号是 3 的倍数的房间作“相反处理”……,以后都是如此。问第 n 个服务员来过后,有几扇门是关闭的?

输入格式

输入一个整数 n 。

输出格式

一个整数,表示关着的门的数量。

样例

输入数据 1

3

输出数据 1

2

数据规模与约定

对于40%40%的数据,n≤105

对于60%60%的数据,n≤5×106

对于80%80%的数据,n≤1012

对于100%100%的数据,1≤n≤1018

代码飞来了!

#include<bits/stdc++.h>
using namespace std;
int main()
{	
	long long n;
	cin>>n;
	if(n==1){
		cout<<0;
		return 0;
	}
	long long j=3,num=1,t=5;
	for(long long i=1;i<=n;){
		i+=j;
		if(i>=n) break;
		num++;
		j+=2;
	}
	cout<<n-num;
	return 0;
}
//太简单了!!!

以上就是全部代码。 

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值