[問題] 最大子集合 函式裡面的BUG不知在哪

看板C_and_CPP (C/C++)作者 (眼睛都是數字)時間13年前 (2013/04/10 10:50), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 裡面的I變數一直都是6 餵入的資料(Input): 10 31 -41 59 26 -53 58 97 -93 -23 84 預期的正確結果(Expected Output): 照理講應該I要是5才對 錯誤結果(Wrong Output): I=6 程式碼(Code):(請善用置底文網頁, 記得排版) /* 題目: Given an array of n real numbers, write a program of finding the maximum sum in any contiguous subvector of the input. Ex: Input: 31, -41, 59, 26, -53, 58, 97, -93, -23, 84 Output: 187 (59+26+(-53)+58+97) */ #include <stdio.h> #include <stdlib.h> void MaxSubSum(int*);//設計者需自行撰寫之涵式 int main() { int *Data; //0資料筆數//1~Data[0]資料 /*輸入(設計者不需撰寫)*/ int* Input(); if( (Data = Input()) == NULL ){ return 1; } /*輸入結束*/ /*設計者自行撰寫部份*/ MaxSubSum(Data); /*設計者自行撰寫部份結束*/ system("pause"); free(Data); return 0; } void MaxSubSum(int *Data) { int Maxsum=0, Tempsum=0, Backtrace=1, Subnum=0, *Subvector=(int*)calloc(Data[0],sizeof(int)), lessthanzero=0, i,j; for(i=1;i<=Data[0];i++){ Tempsum+=Data[i]; if(Tempsum>Maxsum){ if(lessthanzero){ Subnum=0; lessthanzero=0; } for(j=Backtrace;j<=i;j++){ Subvector[Subnum++]=Data[j] ; } Maxsum=Tempsum; Backtrace++; } if(Tempsum<=0){ lessthanzero=1; Tempsum=0; Backtrace++; } } //印出結果 printf("Output is :("); for(i=0;i<=Subnum-3;i++){ if(Subvector[i]<0){ printf("(%d)+",Subvector[i]); } else{ printf("%d+",Subvector[i]); } } if(Subvector[Subnum-1]<0){ printf("(%d))",Subvector[Subnum-1]); } else{ printf("%d)",Subvector[Subnum-1]); } free(Subvector); } int* Input() //輸入函式(設計者不需撰寫) { FILE *fptr; char FileName[256]; int DataNum, *Data, i; printf("請輸入測試檔案: "); scanf("%s", FileName); if( (fptr = fopen(FileName, "r")) == NULL) { printf("檔案開啟失敗\n"); return NULL; } fscanf(fptr, "%d", &DataNum); Data = (int*)calloc(DataNum+1, sizeof(int)); Data[0] = DataNum; for(i = 1; i <= Data[0]; i++) { fscanf(fptr, "%d", &Data[i]); } printf("Input: %d", Data[1]); for(i = 2; i <= Data[0]; i++) { printf(", %d", Data[i]); } printf("\n"); fclose(fptr); return Data; } -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.13.158

04/10 16:54, , 1F
你的I是指什麼東西?
04/10 16:54, 1F

04/10 16:59, , 2F
for(i=0;i<=Subnum-3;i++){ ←為什麼是-3?
04/10 16:59, 2F
文章代碼(AID): #1HPDE4YN (C_and_CPP)
文章代碼(AID): #1HPDE4YN (C_and_CPP)