我以爲我髮際線變高了
總分:415
一維數組 6-7 使用函數輸出指定範圍內的Fibonacci數 : 在一大堆數據中找出重複的是一件常常要作的事情。如今,咱們要處理許多整數,在這些整數中,可能存在重複的數據。 你要寫一個程序來作這件事情,讀入數據,檢查是否有重複的數據。若是有,輸出「YES」這三個字母;若是沒有,則輸出「NO」。
定義變量n爲要輸入多少個數,i爲循環變量,flag爲了控制輸出 定義a數組,數組長度很大,用於存放要輸入的數據,b數組數組長度爲100001,爲空數組 輸入n for i=0 to n do 輸入 存放於a數組的值 end for for i=0 to n do b[a[i]]++ if b[a[i]]>1 then flag++ endif end for if flag>0 then 輸出 YES else then 輸出NO end if
Q1:起初第一個函數的寫法是正確的,因此纔有一分,可是第二個函數無論怎麼改正,仍是一直輸不出正確答案的數字 A1.當要輸入的數字很大時候,PTA會跳出運行超時,而後再找一個數組用來放置另外一個數組的值,再利用flag的值來判斷 Q2.改了第一個的錯誤,後來原本正確的地方反而錯誤了 A2.是另一個數組的問題,後來問了舍友,老師也說了運用空間換時間的方法,而後把兩個數組的長度都設置得很大
二維數組 7-6 找鞍點 一個矩陣元素的「鞍點」是指該位置上的元素值在該行上最大、在該列上最小。 本題要求編寫程序,求一個給定的n階方陣的鞍點。
定義變量i,j,k爲循環變量,n爲設置n階矩陣,flag爲控制變量,max存放最大值,num1爲存放行下標,num2爲存放列下標 定義a數組n-1行,n-1列 for i=0 to n do for j=0 to n do 輸入 存放於a數組的值 end for end for for i=0 to n do max=a[i][0]; for j=0 to n-1 do if max<=a[i][j+1] then //遍歷行中每個數字找行中最大的數字 max=a[i][j+1] num1=i num2=j+1 end if for k=0 to n-1 do //遍歷列中每個數字找是否符合條件 if max>a[k][num2] then flag=0 end if if flag==1 then 輸出 鞍點行下表,列下標 end if else 輸出NONE
Q一開始max的值一直在變,致使num1與num2的值也一直在變,max也不是一行中最大的數,由於我把max放在內循環內 A1.在第二層外循環外定義max爲每行第一個數,解決了max的值一直變化的問題 Q2.當有鞍點的時候,而且是並列的時候,要輸出最後一個鞍點 A2.利用flag來解決問題,經過flag是否等於1來決定輸出哪個 Q3.段錯誤一直沒法解決,不知道哪裏出錯了 A3.問了舍友,讓他看了代碼,他發現了一個小錯誤,改變一下循環的條件。。。竟然過了。。。<=n-1,改成<n-1
字符數組 7-7 判斷E-mail地址是否合法 輸入一個字符串,判斷是不是合法郵箱(格式正確便可,不論是否真的存在)輸入的只能是字母、數字、下劃線、@以及.五種, @先後只能是字母或者數字,並且.後只能是com, 是則輸出YES ,不然輸出NO。
定義變量i=0 ,j 定義index系列用來存放下標,flag系列爲控制變量 ,num系列爲存放各個下標加減之後的新下標 定義字符數組a數組n-1行,n-1列 while a[i]!='\0' //遍歷數組尋找相對應的數組的下標 do if a[i]=='.' then index1=i end if if a[i]=='@' then index2=i; end if i++ for i=0 to a[i] do //找是否有不合法字符 if a[i]==' ' then flag1=0; break; end if else flag1=1 end for if a[j]>='a'||a[j]<='z'||a[j]>='0'||a[j]<='9'||a[j]>='A'||a[j]<='Z' then // @先後只能是字母或者數字 flag2=1 end if j=index2+1; //@的後一位 if a[j]>='a'||a[j]<='z'||a[j]>='0'||a[j]<='9'||a[j]>='A'||a[j]<='Z' then // @先後只能是字母或者數字 flag4=1 end if else flag4=0 num1=index1+1 num2=index1+2 num3=index1+3 num4=index1+4 //.後的三位數 if a[num1]=='c'&&a[num2]=='o'&&a[num3]=='m'&&a[num4]=='\0' then //.後只能是com flag3=1 if flag1==1&&flag2==1&&flag3==1&&flag4==1 then 輸出YES //只有4個控制變量都不爲0時才符合題意 else 輸出NO
***算法
Q1..com後有多餘字符忘記考慮了,還有字符串中有空格,合法地址後有非法字符忘記考慮了 A1.經過在定義好多個flag和num還有index來解決,記住下標來解決他們前幾位是否符合題意 Q2..com後有多餘字符一直出錯 A2.改了上面的問題,其餘原本正確的測試點卻錯了 Q3.看錯題目,把@的先後搞錯題目意思,給寫成了.的先後的條件 A3.經過改變代碼,直接再設一個flag4來判斷@先後是否都是數字或字母
同窗代碼截圖
數組
個人代碼截圖
函數
1.他先看要左移的次數是否能夠求餘,能夠的話先求餘,在肯定最後要移幾回 2.創建兩個數組,經過第二個數組來實現數組的循環左移 3.控制輸出格式時候,是利用循環的次數來控制空格的輸出
1.個人代碼利用了個變量temp,來將首位與最後一位進行交換 2.經過一個for循環來實如今首位與最後一位之間進行m次循環,而後再將temp與第一位和最後一位進行循環,這樣子也就至關於先進行中間循環再進行第一位與最後一位的變換