AI智工作室训练题(十三周)

题目一

输入

唯一的行包含国王的位置,格式为“cd”,其中“c”是从“a”到“h”的列,“d”是从“1”到“8”的行。

输出

打印唯一的整数 x — 国王允许的移动次数。

输入示例

e4

输出示例

8

#include <stdio.h>
 int main(){
 	char c,d,x;
 	scanf("%c%c",&c,&d);//输入国王位置;
 	if(c=='a'||c=='h'){
 		if(d=='1'||d=='8')x=3;//若国王位于棋盘的四个角,则只有三个移动的位置
 		else x=5;//若国王位于a或h列其不位于四个角,则可移动位置有5个
	 }
	else if((d=='1'||d=='8')&&(c!='a'||c!='h')){
		x=5;//若国王位于1或8行其不位于四个角,则可移动位置有5个
	}
	else x=8;//除以上的位置外,国王均有8个可移动位置。
	printf("%d",x);//输出整数x;
 	return 0;
 }

题目二

恭喜你成为了学校里的体育老师。

有n个学生站成一排。但其中有两个学生是死对头。第一个学生的位置是a,第二个学生的位置是b。位置的标号从左到右依次为1~n。

作为一名教师, 你的责任是让他们尽可能地远离彼此,永远不要在一起。他们之间距离的计算式子为|a - b|。

你可以交换相邻的两个学生x次。请你计算在交换最多x次后这两名学生的距离。

输入

第一行包含一个数字 t (1≤t≤100) — 测试用例个数。

每一个用例包含四个数字 n, x, a 和 b (2≤n≤100, 0≤x≤100, 1≤a,b≤n, a≠b) 分别是学生数、你能交换的次数和两个死对头的位置。

输出

每一个用例输出你能让两个学生分开的最大距离。

输入示例

3
5 1 3 2
100 33 100 1
6 0 2 3

输出示例

2
99
1

#include<stdio.h>
int main(){
	int t,k,juli;
	scanf("%d",&t);//输入测试用例个数
	int n[t],x[t],a[t],b[t];
	for(int i=0;i<t;i++){
		scanf("%d%d%d%d",&n[i],&x[i],&a[i],&b[i]);//分别输入每个用例的学生数、你能交换的次数和两个死对头的位置。
	}
	for(int i=0;i<t;i++){
	   juli=0;
	   if(a[i]>b[i])
	   k=a[i]-b[i];
	   else 
	   k=b[i]-a[i];//用来计算a与b之间的距离;
	   juli=k+x[i];//计算移动x次后a与b的距离;
	   if(juli<n[i])//若移动x次后a与b之间的距离小于学生数,则直接输出;
	   printf("%d\n",juli);
	   else //若移动x次后a与b之间最大距离大于学生谁则说明ab分别在队伍的最前和最后,直接输出该队伍的最大距离
	   printf("%d\n",n[i]-1);
		
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值