計算機演算法設計與分析——半數集問題
阿新 • • 發佈:2018-12-16
這裡用來解決《計算機演算法設計與分析(第四版)》第二章課後作業的“半數集問題”,話不多說,上原始碼:
執行結果是兩個txt檔案。
請大家多多指點,謝謝!
#include<stdio.h> #include<stdlib.h> int Hanshu(int n); //作者:郭燎原 //時間:2018-10-21 int shuzu[1000]={0};//定義一個全域性變數 /* int main() { FILE *fp; int i=0; for(i=1;i<1000;i++) { shuzu[i]=Hanshu(i); } for(int j=1;j<1000;j++) { printf("set(%d)==%d\n",j,shuzu[j]);//這裡為什麼不用加取地址符???陣列輸出不用加取地址符!!! } if((fp=fopen("output.txt","w"))==NULL)//“w”是建立並開啟檔案 { printf("Failure to open output.txt!\n"); exit(0); } for(i=1;i<1000;i++) { fprintf(fp,"%12d",shuzu[i]); } fclose(fp); return 0; } */ int main() { FILE *fp; int i; int shuzu2[1000]; ///////////////////////這裡是建立input.txt資料夾/////////////////////////////////////// if((fp=fopen("input.txt","w"))==NULL)//“w”是建立並開啟檔案 { printf("Failure to open input.txt!\n"); exit(0); } for(i=1;i<1000;i++) { fprintf(fp,"%4d",i); } fclose(fp); /////////////////////////這裡是開啟input.txt並將資料輸入陣列shuzu2中////////////////////// if((fp=fopen("input.txt","r"))==NULL) { printf("Failure to open input.txt!\n"); exit(0); } /* for(i=1;i<1000;i++) {//按格式讀寫檔案 fscanf(fp,"%4d",&shuzu2[i]); }*/ for(i=1;!feof(fp);i++) {//按資料塊讀寫檔案 fread(&shuzu2[i],sizeof(int),999,fp); } fclose(fp); //////////////////////////////////////////執行函式//////////////////////////////////////////////// for(i=1;i<1000;i++) { shuzu[i]=Hanshu(shuzu2[i]); } /////////////////////////////////////將函式結果放在output.txt中//////////////////////////////////// if((fp=fopen("output.txt","w"))==NULL)//“w”是建立並開啟檔案 { printf("Failure to open output.txt!\n"); exit(0); } for(i=1;i<1000;i++) { fprintf(fp,"%12d",shuzu[i]); } fclose(fp); return 0; } int Hanshu(int n) {//高速演算法 int sum=1; if(shuzu[n]>0) { return shuzu[n]; } for(int i=1;i<=n/2;i++) { sum+=Hanshu(i); } return sum; } /* int Hanshu(int n) {//低速演算法,理論可行 int sum=1; for(int i=1;i<=n/2;i++) { sum=sum+Hanshu(i); } return sum; } */