1. 程式人生 > 其它 >w13 12/09/2020 實驗課上機總結

w13 12/09/2020 實驗課上機總結

技術標籤:課內學習筆記演算法

題目描述
鍵盤輸入n,m,n為整數個數,m為每一個數的後移位數,要求後面的數迴繞到前面
核心程式碼

//方法一:陣列作臨時交換變數
int b[N] = { 0 }, *p, *q;
	p = a;
	q = b;
	for (; q - b < n; p++, q++) {
		while (p - m - a < 0)//本質與核心:平移後的下標
			p += n;
		while (p - m - a > n-1)
			p -= n;
//方法二:簡單變數作臨時交換變數
int t, * p;
	p = a;
	while (p + n - 2
- a -(m%n-1)>= 0) {//不斷與前一位做交換 t = *(p + n - 1); *(p + n - 1) = *(p + n - 2); *(p + n - 2)=t ; p--; }

方法二當時沒做出來…現在是中午12:30,下課時間是9:35
總結出來的現象是:
迴繞條件下,每一個數組元素向後移動一位,最後一個元素開始不斷與前一個交換,直到最後一個元素被交換到第一位為止。
後移m位,也就是將這個過程做m次。
為什麼是m%n呢?想一想%的特點:迴圈、週期、範圍。
其實不用m%n只用m也可,只是多做了幾次while迴圈,但想一想,如果m=2^31-1,多做的迴圈就不止幾次了。

發掘其中的數學規律可以有效減少時空成本。

總結

1.基本上能做到不受外界干擾沉浸式做題,但最後幾分鐘仍然沒能堅持下來提前走了,需要反思。
2.草稿本很重要,班群裡面的反映也是如此。
3.從最基本最簡單的特例入手,尋找規律是必然,不要試圖從抽象符號一步到位,無數的嘗試證明這是徒然的,除非日常有足夠的刻意練習。這與第二點相輔相成。
4.測試的時候忽略了極端資料,即移動的時候只測試了1、2位,未測試2^31-1這種龐大的數字,導致提交的時候該用while的卻用了if,這屬於忽視了另一種特殊情形。
5.班群裡面DL很多,但不要一味焦慮,應當潛心學習。
6.平時發呆胡思亂想的時間太多了,潛意識刻意練習不夠到位。

7.另,今天開始學習使用markdown,感覺很有趣(๑•̀ㅂ•́)و✧(突然活潑)