zzuli:21级班级天梯赛第一阶段题题解(新手友好版)

1-1 你好,天梯赛

题目描述

这道超级简单的题目没有任何输入。
你只需要在一行中输出短句“Hello, Tian Ti Sai!”就可以了。

输入格式

没有输入。

输出格式

Hello, Tian Ti Sai!

题目分析

hello World!级别题目

代码实现
#include<stdio.h>
int main()
{
	printf("Hello, Tian Ti Sai!\n");//直接输出
	return 0;
 }
运行结果

在这里插入图片描述

1-2 天梯赛考场

题目描述

假设我们的天梯赛考场座位有n排m列,请计算,该考场总共能安排多少学生就坐?

输入格式

两个整数,n和m,空格隔开,分别代表考场有n排,m列。

输出格式

一个整数,代表总座位数。

题目分析

n排,m列有n*m个座位

代码实现
#include<stdio.h>
int main()
{
	int n,m;
	scanf("%d %d",&n,&m);
	printf("%d\n",n*m);
	return 0;
}
运行结果

在这里插入图片描述

1-3 《算法竞赛 · 进阶指南》

题目描述

“探索一门学问有三个层次:求其解,知其原因,究其思维之本。” ——《算法竞赛 · 进阶指南》
请问 int 类型最多可以存多大的数?longlong 类型最多可以存多大的数?

输入格式

输入一个大写字母,I 或者 L

输出格式

如果输入的是大写字母 I,输出 int类型的最大值:2147483647
如果输入的大写字母是L,输出long long类型的最大值:9223372036854775807

题目分析

此题目要引用头文件#include<limits.h>
有了这个头文件就可以计算各种数据类型的最大值和最小值
CHAR_BIT:一个字节中的位数。
SCHAR_MIN:有符号字符型的最小值。
SCHAR_MAX:有符号字符型的最大值。
UCHAR_MAX:无符号字符型的最大值。
SHRT_MIN:短整型的最小值。
SHRT_MAX:短整型的最大值。
USHRT_MAX:无符号短整型的最大值。
INT_MIN:整型的最小值。
INT_MAX:整型的最大值。
UINT_MAX:无符号整型的最大值。
LONG_MIN:长整型的最小值。
LONG_MAX:长整型的最大值。
ULONG_MAX:无符号长整型的最大值。
LLONG_MIN:更长整型的最小值。
LLONG_MAX:更长整型的最大值。
ULONG_MAX:无符号更长整型的最大值。

#include <stdio.h>
#include <limits.h>

int main() {
    printf("CHAR_BIT: %d\n", CHAR_BIT);
    printf("SCHAR_MIN: %d\n", SCHAR_MIN);
    printf("SCHAR_MAX: %d\n", SCHAR_MAX);
    printf("UCHAR_MAX: %u\n", UCHAR_MAX);
    printf("SHRT_MIN: %d\n", SHRT_MIN);
    printf("SHRT_MAX: %d\n", SHRT_MAX);
    printf("USHRT_MAX: %u\n", USHRT_MAX);
    printf("INT_MIN: %d\n", INT_MIN);
    printf("INT_MAX: %d\n", INT_MAX);
    printf("UINT_MAX: %u\n", UINT_MAX);
    printf("LONG_MIN: %ld\n", LONG_MIN);
    printf("LONG_MAX: %ld\n", LONG_MAX);
    printf("ULONG_MAX: %lu\n", ULONG_MAX);
    printf("LLONG_MIN: %ld\n", LLONG_MIN);
    printf("LLONG_MAX: %ld\n", LLONG_MAX);
    printf("ULLONG_MAX: %lu\n", ULLONG_MAX);
    return 0;
}
代码实现
#include<stdio.h>
#include<limits.h>
int main()
{
	char a;
	scanf("%c",&a);//判断求哪种数据类型最大值
	if(a=='I')
	{
		printf("%d\n",INT_MAX);
	}
	else if(a=='L')
	{
		printf("%lld\n",LLONG_MAX);
	}
	return 0;
}
运行结果

在这里插入图片描述
在这里插入图片描述

1-4 《AK》

题目描述

“我就像一个网瘾少年,享受着每次AK。” ——HRS
你想要输出一个有n个字符的字符串以获得自信
那么你是否可以如愿输出一个具有AK的完整的"AK"字符串?
完整的"AK"字符串必须含有AK这两个字符且不能有多余无法匹配的A或者K如 AKAKAK就是完整的,而AKA就是不完整的

输入格式

一个整数 n(0≤n≤100)

输出格式

如果可以输出完整的 “AK” 字符串,在第一行输出YES,然后在第二行输出这样的字符串;如果不可以,输出NO

题目分析

本题单从题目来看只需看输入n是否为偶数,偶数则可以输出完整的AK,奇数则不行。但要注意当输入值为0时,也输出NO。

代码实现
#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	if(n%2!=0||n==0)//为奇数和0输出NO
	{
		printf("NO\n");
	}
	else if(n%2==0)//为偶数输出YES
	{
		printf("YES\n");
		for(int i=0;i<n;i+=2)//通过i每次加2循环实现AK的输出
		{
			printf("AK");
		}
	}
	return 0;
}
运行结果

在这里插入图片描述
在这里插入图片描述

1-5 天鸟火炮

题目描述

小Z生活的部落有一座保卫安全的天鸟火炮,他想设置一个数值 c,当敌人出动全部兵力的 c% 或者更多时,它才会触发保卫部落安全

输入格式

第一行一个整数T(1≤T≤1000),表示T组数据,下面 T 行每行三个整数 a,b,c(0≤a≤10
5,0≤b≤a,1≤c≤100)分别表示敌人的总兵力、出动的兵力以及小Z设置的数值。

输出格式

T 行,如果部落安全则输出Yes,否则输出No,不含双引号,每组数据占一行。

题目分析

本题通过输入的 b(出动兵力)占 a(总兵力)百分比与 c(触发天鸟火炮值)进行比较,判断是否触发天鸟火炮,触发天鸟火炮部落安全,否则不安全。注意这里输入的c值为百分数,我们通过p=b/a*100来与c进行比较。
注意:a可能为0,不能当分母,故应该先排除此类情况。

代码实现
#include<stdio.h>
int main()
{
	int T;
	scanf("%d",&T);//T组数据
	int a[1001],b[1001],c[1001];
	for(int i=1;i<=T;i++){
		scanf("%d %d %d",&a[i],&b[i],&c[i]);
	}//a为总兵力,b为出动兵力,c为触发天鸟火炮值
	for(int i=1;i<=T;i++){
		if(a[i]==0)//发动兵力为0时村庄安全
		{
			printf("Yes\n");
		}
		else{
		//计算p,这里要注意p为浮点类型
		//所以加个1.0*可以使类型转换
		//或者换成(double)进行强制类型转换
		//double p=(double)b[i]/a[i]*100;
		double p=1.0*b[i]/a[i]*100;
		if(p>=c[i])//下面与c值进行比较
		printf("Yes\n");
		else if(p<c[i])
		printf("No\n");
		}
	}
	return 0;
}
运行结果

在这里插入图片描述

1-6 《从你的全世界路过》

题目描述

“我希望有个如你一般的人,如山间清爽的风,如古城温暖的光。从清晨到夜晚,由山野到书房。只要最后是你,就好。” ——《从你的全世界路过》
我们定义 “如 x 一般的数” 是 x 的幂给你一个数 x 和一个数 y,请你判断 y 是不是如 x 一般的数

输入格式

输入两个整数 x,y(1≤x,y≤10^5)

输出格式

如果y 是如 x 一般的数,输出YES;否则输出 NO

题目分析

注意y的范围,我们使用long long类型
本题我们只需判断y是否等于x的多少次方,这里要注意当y为1时,y一定是x的一般数,因为x的0次方为1;但当x为1时,y除了是1就不可能是新的一般数,因为1的任何次幂都为1。

代码实现
#include<stdio.h>
int main()
{
	long long y;
	int x,q=1;//q用来判断下面循环是否能找到x的一般数
	scanf("%d %lld",&x,&y);
	long long p=x;//每次用p对x的累成与y比较
    if(y==1)//y为1时,y一定是x的一般数
    {
        printf("YES\n");
        return 0;//结束程序
    }
	while(p<=y){//当p>y时循环结束
		if(x==1){//当x为1时,y除了是1就不可能是新的一般数
			break;//结束循环,q值不变
		}
		if(y==p)//当y与p相等时,y是x的幂次
		{
			q=0;//当循环结束后没找到x的一般数q值不变,否则q变为0
			printf("YES\n");
			break;//结束循环
		}
		p*=x;//每次用p对x的累成与y比较
	}
	if(q){//q为1判断为真执行if语句
	printf("NO\n");
	}
	return 0;
}
运行结果

在这里插入图片描述

1-7 《双城之战》

题目描述

“蔚:爆爆,正是你的与众不同让你强大,牢牢记住这一点,好吗?” ——《双城之战》
我们在这里定义两个名字完全一样的人是同一个人
请你在多个影视人物中找出第几个人是游戏角色

输入格式

第 1 行一个字符串代表你锁定的游戏角色名字
第 2 行一个正整数 n,(1≤n≤10^3 )
第 3→n+2 行每行一个字符串代表给出的影视人物名字给出的所有字符串长度不超过 10 ^3
(保证这 n 个影视人物中有且只有一个是你锁定的游戏角色)

输出格式

输出一行,只有一个数字代表给出的影视人物中第几个人是你锁定的游戏角色

题目分析

本题用到strcmp函数,详情介绍看主页2023级天梯赛热身赛1-6知识点补充
strcmp得以帮助找到与锁定角色相同名字的任务

代码实现
#include<stdio.h>
#include<string.h>
int main()
{
	char name1[1001];//锁定人物的名字
	gets(name1);
	int n;
	scanf("%d",&n);//输入总角色个数
	char name[1001];//每次输入角色名字
	getchar();//接收回车
	for(int i=0;i<n;i++)
	{
		gets(name);
		if(strcmp(name,name1)==0)//当输入名字与锁定人物的名字相同时
		{
			printf("%d\n",i+1);//输出该名字序号
			break;//结束循环,这样可减少循环次数节约时间
		}
	}
	return 0;
}
运行结果

在这里插入图片描述

1-8 “这个世界不需要守望先锋”

题目描述

“Oldsoldiersneverdie,andtheydon ′ tfadeaway.” —— 士兵76
士兵76在高台上悠哉的出入,敌方神出鬼没的末日铁拳突然出现准备将76击杀。士兵76随即开启大招战术目镜准备应敌。
士兵76开启大招后每发子弹可以造成 20 点伤害,且一定会命中。
末日铁拳有 250 点血量,每释放一个技能可以增加 25 点血量。
现在告诉你末日铁拳释放的技能数 n,请你计算士兵76至少需要多少发子弹才能击杀末日铁拳。

输入格式

末日铁拳释放的技能数 n( n为 int 型整数)。

输出格式

输出一个整数表示士兵76击杀末日铁拳至少需要的子弹数。

题目分析

本题应先知道末日铁拳的总血量,可由释放技能数计算出。当血量为20的倍数就可用血量除以子弹伤害得出,否则需要再放一次技能将其击杀。
坑点:本题虽说n为int类型,但提交上去总有一个测试点拿不到分,所以我们考虑用一个更大的数据类型。

代码实现
#include<stdio.h>

int main()
{
    unsigned long long n;//末日铁拳释放技能数
    scanf("%llu",&n);
    unsigned long long add=250+n*25;//末日铁拳的总血量
    unsigned long long d=add/20;
    if(add%20==0)
        printf("%llu\n",d);
    else
        printf("%llu\n",d+1);
    return 0;
}
运行结果

在这里插入图片描述

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值