看板 b99902HW 關於我們 聯絡資訊
各位資工系的強者好 我是外系旁聽的 這次的作業我卡了很久所以來這裡求救 如果這樣有觸犯板規 請版主不要劣退我 我會自D 以下是程式碼: #include <stdio.h> int main(){ int a[100]; int c=0;//count int m=0;//middle int i,j; int l=0;//length int n=0; int nn=0; int lr[2][10000]={{0},{0}}; int maxlr[2][10000]={{0},{0}}; int ll=0; int rr=0; while(scanf("%d",&a[c])==1){ c++; }//計算輸入資料有幾筆 //odd 計算如 12321 的單數回文 for(i=1;i<c;i++){ l=0; for(j=1;((i-j)>=0)&&((i+j)<c);j++){ if(a[i-j]==a[i+j]){ m=i; l++; lr[0][n]=m-l; lr[1][n]=m+l; n++; }else break; } } //even 計算如 123 321 的偶數回文 for(i=0;i<c;i++){ l=0; for(j=0;(i-j)>=0&&(i+j+1)<c;j++){ if(a[i-j]==a[i+j+1]){ m=i; l++; lr[0][n]=m-l+1; lr[1][n]=m+l; n++; }else break; } } //每個數字自己也算回文 如 1 for(i=0;i<c;i++){ lr[0][n+i]=i; lr[1][n+i]=i; } n+=c; //找所有雙回文的頭尾 for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(lr[1][i]+1==lr[0][j]){ maxlr[0][nn]=lr[0][i]; maxlr[1][nn]=lr[1][j]; nn++; } } } //由上一個for所得資料找到最長的雙回文 for(i=0;i<nn;i++){ if(maxlr[1][i]-maxlr[0][i]>rr-ll){ ll=maxlr[0][i]; rr=maxlr[1][i]; }else if(((maxlr[1][i]-maxlr[0][i])==(rr-ll))&&(maxlr[0][i]>ll)==1){ ll=maxlr[0][i]; rr=maxlr[1][i]; } } for(i=ll;i<=rr;i++) printf("%d ",a[i]); } 這個程式只能得到7分 希望能有強者告訴我是哪裡出了問題 另外因為單班強者們一定都跟這個程式奮戰許久 相信一定看得懂我在寫甚麼 如果因為我寫得太沒有條理看不懂 請推文告知我會補上 感謝強者們~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 119.77.199.111
a13032002:當輸入是 1 2 3 2 1 時,你的程式輸出 1 2 3 2 1 09/30 22:46
a13032002:依照題意,答案應該是 2 3 2 1 (?) 09/30 22:46
math120908:68~72行應該是多餘的(?) 然後以後最好PO一下想法XD" 09/30 23:23
Frux:各行加個註解吧 你以後會很需要的XDDDDD 10/01 00:44
※ 編輯: radar735 來自: 119.77.199.111 (10/01 07:23)
radar735:註解已補上 10/01 07:24
radar735:非常感謝各位...我把68~72砍掉終於10分了 10/01 07:27