關於這個題目,我先用C++把解題的算法寫了出來,先發解題算法,便於理解,接下來再發利用文件輸入輸出後的整段代碼。c++
代碼1:算法
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main (int argc,const char * argv[]) 4 { 5 int arr[100];//先定義一個整形數組 6 int n,t,x;//t是最大子數和數組終止下標,X是起始下標 7 cin>>n;//輸入數組元素數量 8 for(int i=0;i<n;i++)cin>>arr[i];//賦值 9 int ans=0,maxs=0;//定義一個字數和,和最大字數和 10 for(int i=0;i<n;i++)//遍歷全部元素 11 { 12 ans+=arr[i];//累加每一個元素 13 if(ans>maxs){t=i;maxs=ans;}//若是ans大於maxs,證實此時仍是一個連續的最大和子數組,而且用maxs標記該值 14 if(ans<0){ans=0;x=i+1;}//若是ans小於0,則證實此時必定小於以前的子數和,直接從i+1個下標開始找下一個最大子數和數組 15 } 16 for(int i=x;i<=t;i++)//輸出連續的最大子數和數組 17 cout<<arr[i]<<" "; 18 return 0; 19 }
下面這段代碼是用C語言來利用文件完成輸入輸出,而且將須要的數值寫入文件:(因爲解題算法代碼中已解釋,該處代碼簡單標註一下,很少作解釋)數組
1 #include<bits/stdc++.h> 2 3 #define MAXN 10000 4 int main ( int argc , const char * argv[]) 5 { 6 FILE * FP; 7 ((FP=fopen("D:\\zdzsh.txt","a+"))==NULL)?printf("fail\n"):printf("OK!\n"); 8 int arrs[MAXN],n; 9 scanf("%d",&n); 11 for(int i=0;i<n;i++){ 12 fscanf(FP,"%d,",&arrs[i]);//從文件讀入整形數值和用來分離的逗號 13 } 14 int ans=0,maxs=0,t,x; 15 for(int i=0;i<n;i++) 16 { 17 ans+=arrs[i]; 18 if(ans>maxs){t=i;maxs=ans;} 19 if(ans<0){ans=0;x=i+1;} 20 } 21 for(int i=0;i<n;i++)printf("%d ",arrs[i]); 22 printf("\n"); 23 24 FP=fopen("D:\\zdzsh.txt","a+");//因爲直接從文件讀入數據,文件指針須要重置到最前方纔能繼續寫入數據 25 fprintf(FP,"\n"); 26 for(int i=x;i<=t;i++){printf("%d ",arrs[i]);fprintf(FP,"%d ",arrs[i]);} 27 printf("\n%d",maxs); 28 fprintf(FP,"\n%d",maxs); 29 30 fclose(FP); 31 return 0; 32 }
因爲以前文件指針一直沒有重置,致使反覆試沒法將數據輸入至文件當中.只需再次輸入絕對路徑重置文件指針便可。學習
7-1 判斷上三角矩陣 (15 分)spa
上三角矩陣指主對角線如下的元素都爲0的矩陣;主對角線爲從矩陣的左上角至右下角的連線。設計
本題要求編寫程序,判斷一個給定的方陣是否上三角矩陣。指針
輸入第一行給出一個正整數T,爲待測矩陣的個數。接下來給出T個矩陣的信息:每一個矩陣信息的第一行給出一個不超過10的正整數n。隨後n行,每行給出n個整數,其間以空格分隔。調試
每一個矩陣的判斷結果佔一行。若是輸入的矩陣是上三角矩陣,輸出「YES」,不然輸出「NO」。code
2 3 1 2 3 0 4 5 0 0 6 2 1 0 -8 2
YES NO
本題目比較容易,只要不粗心,通常一遍過..注意須要遍歷的範圍便可。blog
代碼:
1 #include <bits/stdc++.h> 2 #define MAXN 101 3 using namespace std; 4 int num_jz[MAXN][MAXN]={0};//初始化二維數組 5 int main(int argc,const char * argv[]) 6 { 7 int T,n; 8 cin>>T;//T組數據 9 while(T--){ 10 int flag=0; 11 cin>>n;//n行n列 12 for(int i=0;i<n;i++){ 13 for(int j=0;j<n;j++){ 14 cin>>num_jz[i][j]; 15 } 16 } 17 for(int i=0;i<n;i++){ //遍歷範圍 18 for(int j=0;j<i;j++){ 19 if(num_jz[i][j]!=0){flag=1;break;} 20 } 21 } 22 if(flag==0)cout<<"YES"<<endl; 23 else cout<<"NO"<<endl; 24 } 25 return 0; 26 }
設計思路
遍歷範圍出現問題,遍歷超出了所須要判斷的範圍。其他無大問題。
運行結果截圖
自我評價:這次題目難度不是很高,但寫的過程當中還有不少粗心的地方,致使一些簡單的地方卡住,仍是但願下次本身能認真點寫...
學習總結:
學習總結: | 存在的問題 | 心得 | 完成做業消耗時間 | 本週學習內容 |
對文件讀取數據的運用不是很熟練 | 多去看關於刷題的書籍,有助於提升本身寫題能力,實在不會的能夠參考大佬的代碼,加以本身理解以後去默寫幾遍 | 半小時左右 | 文件輸入,BFS,DFS,PARTITION算法及簡單的貪心算法 |