题目一
输入
唯一的行包含国王的位置,格式为“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;
}