iT邦幫忙

0

數學問題,一個月中每一日是星期幾?

  • 分享至 

  • xImage

已知該月第一天是星期四,最後一天是星期六,總天數為31日,
計算出該月中每一日是星期幾?
請用java程式表達
不是功課,只是正好做個功能需要用到這計算而已

看更多先前的討論...收起先前的討論...
淺水員 iT邦大師 6 級 ‧ 2019-08-07 16:00:37 檢舉
假設第一天是星期 a
那麼該月 x 日為星期 (a+x-1)%7
PS. 星期 0 代表周日

EX. 上例中 31 號是:(4+31-1)%7=6 (星期六)
請用java程式表達
淺水員 iT邦大師 6 級 ‧ 2019-08-07 16:15:28 檢舉
我以為只是在問數學問題,畢竟印象中發問者程式不弱呢。
程式不弱但數學很爛,加上腦子事情太多,所以就直接問了,雖然想到解法了,但還是看看其他人的答案好了~
dragonH iT邦超人 5 級 ‧ 2019-08-07 16:39:13 檢舉
其實也不用強求 java 啦

這基本上比較吃邏輯

程式碼換成 java 的函式就 ok 了
ccutmis iT邦高手 2 級 ‧ 2019-08-07 16:41:05 檢舉
其實他是來讓大家動動腦的o.O
其實是想找更好的算法,結果是用mod來算~
淺水員 iT邦大師 6 級 ‧ 2019-08-07 16:50:09 檢舉
其實不見得只能從第一天來推
假設已知 D1 日 是 星期 d1
計算 D2 日 是星期 d2 可以這樣算:
d2=(d1+D2-D1+35)%7
其中+35是避免括號內的數字變成負數
數學讓偶頭粉痛~
這題好熟悉
12019 - Doom's Day Algorithm
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=242&page=show_problem&problem=3170
froce iT邦大師 1 級 ‧ 2019-08-08 07:04:29 檢舉
這...不用mod算要用啥算?
而且這是小學生數學吧。

其他的算法,不過這些都是根本不用基準日的:
https://zh.wikipedia.org/wiki/%E6%98%9F%E6%9C%9F%E7%9A%84%E8%A8%88%E7%AE%97
長見識
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
dragonH
iT邦超人 5 級 ‧ 2019-08-07 16:10:37

逼逼

怎麼偷改問題 XD /images/emoticon/emoticon49.gif

codepen

const dayFormat = ['Monday', 'TuesDay', 'Wednesday', 'ThursDay', 'Friday', 'Saturday', 'Sunday'];
const monthToFind = new Date('2019-08');

const findDay = (dayToFind) => {
  const monthTotalDays = new Date(monthToFind.getFullYear(), monthToFind.getMonth() + 1, 0).getDate();
  const firstDayOfMonth = monthToFind.getDay();
  const firstDateMathFind = firstDayOfMonth > dayToFind
    ? monthToFind.getDate() + (dayToFind - firstDayOfMonth + 7)
    : monthToFind.getDate() + (dayToFind - firstDayOfMonth);
  for (let date = firstDateMathFind; date <= monthTotalDays; date += 7) {
    console.log(`${date} is ${dayFormat[dayToFind - 1]}`);
  }
};
findDay(6);

計算該月每一日是星期幾

應該有 function 可以直接用吧/images/emoticon/emoticon48.gif

const findSpecificDate = (dateToFind) => {
  const whatDayIsTheDate = new Date(dateToFind).getDay()
  console.log(`${dateToFind} is ${whatDayIsTheDate === 0 ? dayFormat[6] : dayFormat[whatDayIsTheDate - 1]}`)
}

findSpecificDate('2019-08-07')

如果條件真的只有

已知該月第一天是星期四,最後一天是星期六,總天數為31日,

codepen

0
小魚
iT邦大師 1 級 ‧ 2019-08-07 16:20:13

這不是...上網查一下就好了嗎?

1
Lee
iT邦新手 5 級 ‧ 2019-08-07 16:30:41

每次看這種相關問題感覺就是把功課丟上來伸手要答案/images/emoticon/emoticon09.gif

1
ccutmis
iT邦高手 2 級 ‧ 2019-08-07 16:35:42
<!doctype html>
<html><head><meta charset='utf-8' /></head>
<body>
<script>
day_flag=4;
day_arr=[];
for(var i=0;i<31;i++){
	day_arr.push(day_flag);
	document.write((i+1)+'日是 星期'+num2weekday(day_flag)+'<br/>');
	day_flag++;
	if(day_flag>7) day_flag=1;
}

function num2weekday(arg){
	return (arg==1?'一':(arg==2?'二':(arg==3?'三':(arg==4?'四':(arg==5?'五':(arg==6?'六':'日'))))));
}

document.write('<br/>=============<br/>');
query_date=10;
day_flag=day_arr[10-1];
document.write('查詢: '+(query_date)+'日是 星期'+num2weekday(day_flag)+'<br/>');
</script>
</body></html>

輸出結果:

1日是 星期四
2日是 星期五
3日是 星期六
4日是 星期日
5日是 星期一
6日是 星期二
7日是 星期三
8日是 星期四
9日是 星期五
10日是 星期六
…中間略過…
30日是 星期五
31日是 星期六

=============
查詢: 10日是 星期六

以上是土炮解法。
話說這個月的1日不正好是星期四嗎!!??
/images/emoticon/emoticon82.gif

Re:"每次看這種相關問題感覺就是把功課丟上來伸手要答案"…恩,我也有這種感覺…
/images/emoticon/emoticon77.gif

看更多先前的回應...收起先前的回應...
dragonH iT邦超人 5 級 ‧ 2019-08-07 16:37:29 檢舉

對呀

我寫完才發現

他舉例就是這個月XD

就是拿這個月當例子,反正重點不在哪個月

ccutmis iT邦高手 2 級 ‧ 2019-08-07 16:39:09 檢舉

重點是 你的教授人就在後面,他現在很火... /images/emoticon/emoticon30.gif

畢業n年了,教授很久沒見了

不明
【**此則訊息已被站方移除**】
ccutmis iT邦高手 2 級 ‧ 2019-08-07 22:58:29 檢舉

/images/emoticon/emoticon41.gif

1
idd0305
iT邦見習生 ‧ 2019-08-07 17:12:28

看到數學問題 腦袋自動關機XD

看到美女就開機… /images/emoticon/emoticon39.gif

表示數學爛也可以寫程式啦,只是遇到問題就有點麻煩了

4

抱歉,這其實無論是哪種語言。解法都是一樣的。
認真來說,只要知道1號是星期幾。就可以算出來了。什麼最後一天星期6跟總天數31天的。
根本就不重要。
java我是不會寫啦,給你php參考。反正只是算數學。很容易帶過

<?php
    $m1 = 4; //1號星期幾
    $d = 10; //要求得同月$d號的星期
    $w = (4+10-1)%7;
    $wStrArr = Array('日','一','二','三','四','五','六');
    echo "{$d}號為星期{$wStrArr[$w]}";
?>

如果這樣的算法不知道java怎麼改我也沒招了。而且你也說你只是數學爛。
相信改成java語言用來說對你很簡單的才對。

其實老祖宗很強的。有所謂的星期計算方式。(當然有搭配對應表就是了)

看更多先前的回應...收起先前的回應...
ccutmis iT邦高手 2 級 ‧ 2019-08-07 17:47:53 檢舉

老祖宗最強的是鬥地主...
/images/emoticon/emoticon82.gif

總天數不知道不會算超過?

都說要求這個月幾號的星期幾了。總天數根本就沒差。

如果硬要求出 2/31 是星期幾我也是醉了。

每個月天數不一樣,還是需要總天數吧,
不然算一年十二個月時,怎麼知道哪個月的天數是多少

這要看題目是否容許不存在的日期規格。也就是是否容許人為操作問題。
但一般來說,給不給總天數是其次。因為就算不給。原始的問題還是不變。
畢竟每個月的天數,除了2月會因為閏年多一天外。(當年會有366天)
其於的天數都是固定天數的。給不給已經無所謂了。
除非,在不考量真正天數的情況下。如題目用2月總天數31天。
這就已經拖離了原定日期制度。只是單純用數學計算的題目。
才需要考量總天數的問題了。

所以,問題的總結在於,是否依日期計算??還是數學計算??
如果依日期,總天數根本無需提供。
如果依數學,總天數才需要提供。

4
純真的人
iT邦大師 1 級 ‧ 2019-08-07 18:47:53

用SQL玩數學題...

declare @m1 int = 4

select Sort
,(case (@m1+Sort-1) % 7 when 0 then '日' when 1 then '一' when 2 then '二' when 3 then '三' when 4 then '四' when 5 then '五' when 6 then '六'end) WeekName
from (
	select Row_Number()Over(order by number) as Sort
	from master..spt_values
) as k
where Sort <= 31
0
e6319a5b
iT邦新手 4 級 ‧ 2019-08-08 19:40:18
def calculate(a):
    lists=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
    return lists[(a+2)%7]
0
taki5000
iT邦新手 5 級 ‧ 2019-08-08 20:05:08

Date物件直接操作就好?看不懂自己算幹嘛

0
一級屠豬士
iT邦新手 2 級 ‧ 2019-08-09 22:06:12
# use python3
al = ['星期四', '星期五', '星期六', '星期日', '星期一', '星期二', '星期三']
bl = al * 4 + al[0:3]

for i, element in enumerate(bl, 1):
    print("第%d天 --> %s" % (i, element))
result:
第1天 --> 星期四
第2天 --> 星期五
第3天 --> 星期六
第4天 --> 星期日
...
第29天 --> 星期四
第30天 --> 星期五
第31天 --> 星期六

不一定要用數學計算啦...才31天,就 製作一個list,從星期四開始7天循環4次,再取3天補進去.
然後將此list使用enumerate(),從一開始算,印出來.

0
wunrong
iT邦新手 5 級 ‧ 2019-08-13 10:49:21
var array = ['一','二','三','四','五','六','日']
var index = null

for (let date = 0; date < 31; date++) {
  if(index == null) {
    index = 3
    console.log(date + 1 + ' 號  , 星期 ' + array[index])
    continue
  }

  index ++

  if(index > array.length - 1) {
    index = 0
  }

  console.log(date + 1 + ' 號  , 星期 ' + array[index])
}

我要發表回答

立即登入回答