第四次作業(yè)-----------數(shù)組
1.本章學(xué)習(xí)總結(jié)
1.1 思維導(dǎo)圖

1.2 本章學(xué)習(xí)體會(huì)及代碼量學(xué)習(xí)體會(huì)
1.2.1 學(xué)習(xí)體會(huì)
數(shù)組,沒前面的那么容易學(xué)。一開始覺得嵌套循環(huán)難,后來覺得函數(shù)調(diào)用什么的一臉蒙蔽,現(xiàn)在數(shù)組又總是各種錯(cuò)誤,尤其在螺旋方陣那一題,簡直無從下手。初學(xué)指針,還竟然上課都聽得傻了,于是趕緊去見見翁凱老師,讓他給我補(bǔ)補(bǔ)。很多知識(shí)點(diǎn),其實(shí)書上也都有,老師也提過,遇到不會(huì),只能百度一下,看是有什么知識(shí)點(diǎn)不知道,不然,就會(huì)不知道自己在學(xué)什么了。
數(shù)組的學(xué)習(xí),一個(gè)星期就可以結(jié)束,pta題集一個(gè)接一個(gè)地出,每次總是自己還沒動(dòng)手,大佬就已經(jīng)打完了。很多時(shí)候其實(shí)看著挺慌的。自己也很想像以前一樣,布置的題集馬上寫完,但是,現(xiàn)在的處境是,上課都有點(diǎn)蒙蔽,要馬上刷完題都很困難的。然而,慌也沒用,要想不慌只能花時(shí)間去把代碼給敲完。
發(fā)現(xiàn)自己做題的進(jìn)度雖然很慢,做了總是有效果的,有空就琢磨琢磨不會(huì)的題目,這樣也是一種進(jìn)步吧。刷題刷多了,自然就不會(huì)覺得數(shù)組難。編程是鍛煉人的邏輯思維,所謂熟能生巧,多做做,多想想,就會(huì)有感覺,自然,也就沒有我想象中的那么難。
細(xì)想一下,前期學(xué)習(xí)比較輕松,除了知識(shí)點(diǎn)比較容易,還有很大一部分是因?yàn)槭罴僮詫W(xué)了,再次拾起的時(shí)候,自然就一講就會(huì),自信也就油然而生。然后,現(xiàn)在的我想的是要好好利用寒假,自學(xué)數(shù)據(jù)結(jié)構(gòu)那一塊。題集的話,在之前王俊玲老師說誰要的時(shí)候,也申請(qǐng)了,不怕沒有題目練手。業(yè)精于勤荒于嬉,拼搏過是會(huì)有收獲的。
后面的學(xué)習(xí)不會(huì)越來越輕松,只會(huì)越來越難,我能做的就是多花些時(shí)間,一分耕耘,一分收獲,要想讓自己變得強(qiáng)大,就要多花些精力去做。
1.2.2 代碼累計(jì)

2.PTA總分



2.2 我的總分:
一位數(shù)組:175
二維數(shù)組:99
字符數(shù)組:135
數(shù)組總分:409
3.PTA實(shí)驗(yàn)作業(yè)
3.1 PTA題目1
7-8 找出不是兩個(gè)數(shù)組共有的元素 (20 分)
給定兩個(gè)整型數(shù)組,本題要求找出不是兩者共有的元素。
輸入格式:
輸入分別在兩行中給出兩個(gè)整型數(shù)組,每行先給出正整數(shù)N(≤20),隨后是N個(gè)整數(shù),其間以空格分隔。
輸出格式:
在一行中按照數(shù)字給出的順序輸出不是兩數(shù)組共有的元素,數(shù)字間以空格分隔,但行末不得有多余的空格。題目保證至少存在一個(gè)這樣的數(shù)字。同一數(shù)字不重復(fù)輸出。
3.1.1 算法分析
- int cnt=0; //控制空格,保證行末無多余空格
- for(j=0 to n1)
scanf讀入a中元素
end for
- for(j=0 to n2)
scanf讀入b中元素
end for
- int n3=n1+n2;
- int c[n3]; //定義第三個(gè)數(shù)組存放所有元素
- static int flag[40]; //初始化數(shù)組元素全為0,發(fā)現(xiàn)共有賦值為1
- for(i=0 to n3) // 將兩數(shù)組元素放入C中
- if(i<n1) c[i]=a[i];
else c[i]=b[i-n1]; //b緊接著放入a后面
end if
- for(i=0 to n3)
- for(j=i+1 to n3)
- if(c[i]==c[j]&&j<n1) //兩元素都在a中,后一個(gè)不輸出
flag[j]=1;
end if
- if(c[i]==c[j]&&i>=n1) //兩元素都在a中,后一個(gè)不輸出
flag[j]=1;
end if
- if(c[i]==c[j]&&i<n1&&j>=n1) //兩元素分居于a,b中,則都不輸出
flag[i]=1;flag[j]=1;
end if
end for
end for
- for(i=0 to n3)
- if(flag[i]==0) //不是共有的元素
- if(cnt==0)
輸出該數(shù) //第一個(gè)元素前面無空格
cnt=1;
else輸出空格加上該數(shù)組元素
end if
end if
end for
3.1.2 代碼截圖


3.1.3 PTA提交列表及說明

Q1:發(fā)現(xiàn)相同元素就刪除,代價(jià)比較大,輸出會(huì)亂掉
A1:構(gòu)建新的數(shù)組c存放a,b中元素,再定義flag[i]控制輸出情況
Q2:b中有相同元素,a中沒有時(shí)會(huì)重復(fù)輸出
A2:n1是b中元素的第一個(gè),判斷時(shí)應(yīng)加上等號(hào)
3.2 PTA題目2
7-3 判斷上三角矩陣 (15 分)
上三角矩陣指主對(duì)角線以下的元素都為0的矩陣;主對(duì)角線為從矩陣的左上角至右下角的連線。
本題要求編寫程序,判斷一個(gè)給定的方陣是否上三角矩陣。
輸入格式:
輸入第一行給出一個(gè)正整數(shù)T,為待測矩陣的個(gè)數(shù)。接下來給出T個(gè)矩陣的信息:每個(gè)矩陣信息的第一行給出一個(gè)不超過10的正整數(shù)n。隨后n行,每行給出n個(gè)整數(shù),其間以空格分隔。
輸出格式:
每個(gè)矩陣的判斷結(jié)果占一行。如果輸入的矩陣是上三角矩陣,輸出“YES”,否則輸出“NO”。
3.2.1 算法分析
- 定義次數(shù)repeat定義static int flag[1000]判斷是不是上三角矩陣
- for(k=1 to repeat)
-for(i=0 to n-1)
-for(j=0 to n-1)
scanf讀入數(shù)組元素
end for
end for
//判斷該矩陣是不是上三角矩陣
- for(i=0 to n-1)
- for(j=0 to n-1)
- if(i>j)
- if(a[i][j]!=0)
flag[k]=1;
end if
end for
end for
//遍歷flag[k]輸出yes或者no
- for(k=1 to repeat)
- if(flag[k]==0)輸出yes
else 輸出no
end if
end for
3.2.2 代碼

3.2.3 PTA提交列表及說明

Q1:開始以為題目是如果要輸入多個(gè)矩陣,先判斷一個(gè)矩陣判斷是不是上三角矩陣后再輸入下一個(gè)判斷
A1:參考同學(xué)思路,定義flag[k],記錄每個(gè)矩陣最后是不是上三角矩陣,是就為1,否則為0。最后對(duì)flag[k]進(jìn)行遍歷,如果值為1就輸出yes,否則輸出no
3.3 PTA題目3
7-3(字符數(shù)組做) 切分表達(dá)式——寫個(gè)tokenizer吧 (20 分)
[正題]
四則運(yùn)算表達(dá)式由運(yùn)算數(shù)(必定包含數(shù)字,可能包含正或負(fù)符號(hào)、小數(shù)點(diǎn))、運(yùn)算符(包括+、-、*、/)以及小括號(hào)((和))組成,每個(gè)運(yùn)算數(shù)、運(yùn)算符和括號(hào)都是一個(gè)token(標(biāo)記)。現(xiàn)在,對(duì)于給定的一個(gè)四則運(yùn)算表達(dá)式,請(qǐng)把她的每個(gè)token切分出來。題目保證給定的表達(dá)式是正確的,不需要做有效性檢查。
輸入格式:
在一行中給出長度不超過40個(gè)字符的表達(dá)式,其中沒有空格,僅由上文中token的字符組成
輸出格式:
依次輸出表達(dá)式中的tokens,每個(gè)token占一行。
3.3.1 算法分析
- int flag=0;//判斷正負(fù)號(hào)是連接兩數(shù)還是代表正負(fù)
- 先輸出第一個(gè)字符
- if(ch[i]=='-'||ch[i]=='+') //第一個(gè)字符為正負(fù)號(hào)
flag=1;
end if
- if(ch[i])
- if(0<=ch[i]<=9)
- if(0<=ch[i-1]<=9或者ch[i-1]='-','+'&&flag=1或者ch[i-1]='.') //大于一位的數(shù)字,有正負(fù)號(hào)和小數(shù)點(diǎn)的情況不用換行
printf("%c",ch[i]);
else 換行輸出
esd if
flag=0; //重新歸零,不影響后面計(jì)算
end if
- else if(ch[i]=='-') //字符為負(fù)數(shù)的情況
- if(ch[i-1]=='(') //該運(yùn)算符為負(fù)號(hào)
flag=1;
end if
換行輸出'-'
end else if
- else if(ch[i]=='.') //有小數(shù)點(diǎn)時(shí),不要換行輸出
- else //其他情況,換行輸出
i++
end if
3.3.2 代碼

3.3.3 PTA提交列表及說明

Q1:‘-‘是負(fù)號(hào)不是連接兩數(shù)字的運(yùn)算符時(shí),不能和數(shù)字一起輸出
A1:定義一個(gè)flag判斷該字符是不是正負(fù)號(hào),初值為0,是就令為1,即可連著輸出
Q2:第一個(gè)字符是正負(fù)號(hào)時(shí)格式錯(cuò)誤
A2:在判斷一個(gè)數(shù)字前面有正負(fù)號(hào),不換行輸出后,還應(yīng)該將flag的值重新歸零
4.代碼互評(píng)
7-5 螺旋方陣 (20 分)
所謂“螺旋方陣”,是指對(duì)任意給定的N,將1到N×N的數(shù)字從左上角第1個(gè)格子開始,按順時(shí)針螺旋方向順序填入N×N的方陣?yán)铩1绢}要求構(gòu)造這樣的螺旋方陣。
輸入格式:
輸入在一行中給出一個(gè)正整數(shù)N(<10)。
輸出格式:
輸出N×N的螺旋方陣。每行N個(gè)數(shù)字,每個(gè)數(shù)字占3位。
4.1 代碼截圖
同學(xué)的代碼


自己的代碼截圖

4.2 二者的不同
- 1.同學(xué)代碼是根據(jù)螺旋矩陣遞增的規(guī)律,對(duì)向右,向下,向左,向上四種遞增情況做循環(huán)分析,得出對(duì)應(yīng)的值并放入數(shù)組中
- 2.我的代碼是根據(jù)每個(gè)數(shù)對(duì)應(yīng)圈數(shù)與邊長的關(guān)系建立關(guān)系式,然后計(jì)算得出相應(yīng)的值
- 3.同學(xué)代碼整體看起來符合思考問題的思路,比較清晰,條例分明,我的代碼則比較繞,數(shù)學(xué)邏輯性比較強(qiáng)
posted on 2018-12-08 20:31 haiqingz 閱讀(634) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)