[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
terse就是terse,写出来的代码确实是精炼简洁,不过你这个计算公式实在是有点难懂,
我都看了半天才明白,总觉得没必要写这么复杂的公式,不知兄是否认同?
***共同提高***

TOP

原帖由 batman 于 2008-10-18 11:38 发表
terse就是terse,写出来的代码确实是精炼简洁,不过你这个计算公式实在是有点难懂,
我都看了半天才明白,总觉得没必要写这么复杂的公式,不知兄是否认同?

呵呵 我是这样想的  N天后的星期   就是(N+当天)%%7
由此得到N天前的星期  也就是  7-(N+当天)%%7
简化的话 可以去掉里面一括号 使d=(6-~n%%7+%date:~-1%)%%7
batman兄的意见呢?

[ 本帖最后由 terse 于 2008-10-18 13:31 编辑 ]

TOP

可不可以换个思路呢:
    其实这就是个今天向后几天(这个几天是小于7的)是星期几的问题。假设今天是星期二
,那么往后n个整星期后还是星期二,而7*n+1天后是星期三,7*n+2天后是星期四....7*n+6
天就是星期一,7*n+7=7*(n+1)天后又是星期二了。所以,我解题的思路是今天是星期几如
星期五那就是从星期一向后了5天,于是向后n天便从星期一开始推算:(n+5)%%7,如余数
是0就是星期一,余数为1就是星期二.....以此类推。
    当然向前就是先将星期天向前反推2天(同样是以星期五为例),然后再将反推的总天数
减去2天,公式是一样的,只是在向前天数小于5(星期数)时,一样可以用正推的方法算。
***共同提高***

TOP

Re:batman兄
可以说你我思路上都一样: “其实这就是个今天向后几天(这个几天是小于7的)”
只是你的"(n+5)%%7,如余数是0就是星期一"  这里的 余数是0我以为应该是星期天  当然这和SET 有关
反推的思路  也就是转为几天后  然后用7-去  比如今天星期四  2天前其实就是5天后 这里的5就是7-2得到

TOP

@echo off
:loop
cls
set /p=今天是%date:~-3%
setlocal enabledelayedexpansion
for %%a in (一 二 三 四 五 六 天) do (set /a n+=1&set ".!n!=%%a"
if "%date:~-1%"=="%%a" set x=!n!)
set /p var=几天前或几天后(前加-):
set /a "s=(var%%7+x-7)%%7+7"
if "%var:~,1%"=="-" (set "str=前") else set "str=后"
echo %var:-=%天%str%是星期!.%s%!
echo 按任意键返回
pause>nul&goto:loop
这些代码是参考了pusofalse版主的代码写出来的,虽然这道题不能说是很难,但在写代码时,特别是那个计算的公式,让我着实想了半天。还有楼上的各位高手的set "_!n!=%%a"类似于这样的语句,如果不是自己写,很难想的通。不得不说写这次代码让我有所收获。

TOP

好厉害啊 你们  我是新人 路过

TOP

@ECHO OFF
:MAIN
SET /P D=
SET /A M=1%DATE:~5,2%-100,M+=!(M/3)*12,W=(7%DATE:~8,2%+%D%+2*M+3*(M+1)/5+(Y=%DATE:~,4%-M/13)+Y/4-Y/100+Y/400)%%7+1
ECHO %W%
GOTO MAIN

TOP

返回列表