作者radar735 (◎*◎+◎)
看板b99902HW
標題Re: [作業] 計程單班Homework「Double palindrome」
時間Thu Sep 30 21:58:29 2010
各位資工系的強者好
我是外系旁聽的
這次的作業我卡了很久所以來這裡求救
如果這樣有觸犯板規
請版主不要劣退我 我會自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
1F:→ a13032002:當輸入是 1 2 3 2 1 時,你的程式輸出 1 2 3 2 1 09/30 22:46
2F:→ a13032002:依照題意,答案應該是 2 3 2 1 (?) 09/30 22:46
3F:推 math120908:68~72行應該是多餘的(?) 然後以後最好PO一下想法XD" 09/30 23:23
4F:→ Frux:各行加個註解吧 你以後會很需要的XDDDDD 10/01 00:44
※ 編輯: radar735 來自: 119.77.199.111 (10/01 07:23)
5F:→ radar735:註解已補上 10/01 07:24
6F:→ radar735:非常感謝各位...我把68~72砍掉終於10分了 10/01 07:27