C語言博客作業


一、PTA實驗作業
題目1:使用函數輸出指定范圍內的完數

  1. 本題PTA提交列表
  2. 設計思路
    定義函數 reverse( int number),類型為int
    定義整型變量n,inverse=1;inverse表示逆序數
    判斷number的正負,如果number小於0,則n=-number;否則n=number
    .inverse=inverse*10+n%10.n=n/10;
    重復步驟4.5,直到 n=0
    再判斷一次number的正負,如果number小於0的話,則返回-inverse;否則返回inverse
    結束算法
    3.本題調試過程碰到問題及PTA提交列表情況說明
    在剛開始的時候我實現了函數的所有功能,提交PTA的但是顯示在最大范圍內一直超時,完全不知都從何處優化
    我就在思考,最大范圍應該指的是從1到10000內所有的完數,我覺得應該把所有的完數都試着輸出一下
    我發現除了1之外,所有的完數都是偶數,這就代表着奇數可以不用判斷,可以讓我的代碼的時間復雜度減少一半
    題目2:求組合數
    1.本題PTA提交列表

    2.設計思路

聲明fact函數 double fact(int n);
定義變量 int m,n; double result;
輸入m,n
調用fcat函數 result=fact(n)/(fact(m)fact(n-m)),進入第六步
printf("result = %.0f",result)
定義函數double fact(int n)
定義變量int i;double result=1;
進入循環for(i=1;i<=n;i++) 循環第九步
result=result
i
返回result的值
3.本題調試過程碰到問題及PTA提交列表情況說明
一開始錯誤,輸入 2 7時答案等於0.000000,通過調試,監控result,發現result參數定義錯誤,定義成了int,因為在fact函數中同名變量result它只是整數,而在主函數中它是double型的導致錯誤。
階乘忘記給result初始化為1,導致輸出結果為0
題目3:使用函數驗證哥德巴赫猜想
1.本題PTA提交列表

2.設計思路

定義prime函數及形參即int prime(int p)
定義變量並初始化 int i,n;n=sqrt(p);
如果p為1,則返回0;
否則進入循環for(i=2;i<=n;i++)循環第四步
如果p能整除i,則返回0
return 1
定義Goldbach函數即void Goldbach(int n)
定義變量int q,p
進入循環for(p=2;p<=n;p++)循環第十步和第十一步
if(prime(p)==1),則q=n-p;
if(prime(q)==1) 則printf("%d=%d+%d",n,p,q)並退出循環
3.本題調試過程碰到問題及PTA提交列表情況說明
輸出許多形式為n=q+p的結果,通過調試監控n,p,q發現循環沒有在輸出一次數據后結束,在if里輸出后添了一句break就正確了
忘記判斷p是否為1,如果為1直接就不為素數
一開始Goldbach函數中for(q=1;q<=n;q++),q一開始初始化為1,但1顯然不為素數導致錯誤

三、截圖本周題目集的PTA最后排名


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



C語言博客作業 C語言博客作業 C語言博客作業 C語言博客作業 C語言博客作業 C語言博客作業 C語言博客作業 C語言博客作業 C語言博客作業 C語言博客作業
 
粤ICP备14056181号  © 2014-2021 ITdaan.com