七月第一周

骑士移动最少步数算法

骑士移动

题目描述:写程序,计算骑士从一个位置移动到另一个位置所需的最少移动次数。骑士移动的规则如下如所示。

每一次跳动,都可以有八种选择,经过多次正确选择后可以找到一个最近的路程。

算法设计:

这是一个求最短距离的问题,可以使用queue进行广度优先搜索步骤,现将起点放入队列,如果队列不空,则对头出对,否则扩展8个方向,如果找到目标,则立即返回步长+1并放入队列,标记其已访问,如果骑士的当前位置为(x,y),则移动时当前位置坐标加上偏移量即可。

输入:

3
8
0 0
7 0 
100
0 0
30 50
10
1 1
1 1

输出:

5
28
0

 代码:

#include<bits/stdc++.h>

int size ;
struct status{     #结构体
	int x;
	int y;
	int step;
}q[100006];

int vec[8][2]={{-2,-1},{-1,-2},{-2,1},{-1,2},{2,-1},{1,-2},{2,1},{1,2}};  #方向
int is[333][333];
void bfs(int sx,int sy,int ex,int ey){     #广度优先搜索
	int head =0,tail=0;
    memset(is,0,sizeof(is));
	q[tail].x=sx;
	q[tail].y=sy;
	is[sx][sy]=1;
	tail++;
	while (head<tail){
		if (q[head].x==ex&&q[head].y==ey){
				printf("%d\n",q[head].step);
				break ;
		}
		for(int i=0;i<8;i++){       #对各个方向进行遍历
			int nx=q[head].x+vec[i][0];
			int ny=q[head].y+vec[i][1];
			int step=q[head].step;
			if (nx>=0&&nx<size&&ny>=0&&ny<size&&is[nx][ny]==0){
				q[tail].x=nx;
				q[tail].y=ny;
				q[tail].step=step+1;
				is[nx][ny]=1;
				tail++;
			}	
		} 
		head ++;
	}
	
} 

int main(){
	int k;
	scanf("%d",&k);
	int sx,sy,ex,ey;
	while (k--){        #对每个要实现最短距离的目标进行遍历
		scanf("%d",&size);
		scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
		bfs(sx,sy,ex,ey);
	}
	return 0;
} 

YJG

要确定上周在7月中的周数,可以通过以下几种方法实现: 1. 使用日历规则进行手动计算。通常情况下,周数计算有两种标准:一种是以周一为每周的开始(ISO 周),一种是以周日为每周的开始。例如,7月1日属于哪一周取决于该周是否包含至少四天。按照 ISO 8601 标准,若某周包含至少四天在7月,则该周计为7月的第一周。 2. 利用编程语言中的日期函数进行计算。例如,在 Python 中可以使用 `isocalendar()` 方法获取某日期属于一年中的第几周,结合 `timedelta` 可以计算上周的日期范围并判断其在7月中的周数。 ```python from datetime import datetime, timedelta today = datetime.now() last_week = today - timedelta(weeks=1) if last_week.month == 7: year, week_number, day_of_week = last_week.isocalendar() print(f"上周是{year}年的第{week_number}周,属于7月") else: print("上周不属于7月") ``` 3. 在 Excel 中,可以使用 `WEEKNUM` 函数结合日期计算来判断上周的周数。假设当前日期在单元格 A1 中,公式如下: - 计算上周的日期:`=A1-7` - 判断该日期是否在7月内,并计算其在7月中的第几周: $$=IF(MONTH(A1-7)=7, WEEKNUM(A1-7,21), "不在7月")$$ 4. 使用 SQL 查询计算上周在7月中的周数。以 MySQL 为例,可以使用 `YEARWEEK()` 函数结合条件筛选: ```sql SELECT CASE WHEN MONTH(DATE_SUB(CURDATE(), INTERVAL 1 WEEK)) = 7 THEN YEARWEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK), 3) ELSE NULL END AS week_in_july; ``` 5. 在 JavaScript 中,也可以通过 `Date` 对象和自定义函数计算上周的周数: ```javascript function getLastWeekInJuly() { const today = new Date(); const lastWeek = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000); if (lastWeek.getMonth() === 6) { // 月份从0开始,6代表7月 const year = lastWeek.getFullYear(); const monthStart = new Date(year, 6, 1); const firstWeekday = monthStart.getDay(); const lastWeekDate = lastWeek.getDate(); const weekNumber = Math.ceil((lastWeekDate + firstWeekday) / 7); return `上周是7月的第${weekNumber}周`; } return "上周不属于7月"; } console.log(getLastWeekInJuly()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值