リュカのキヤノンボール問題をC言語で…
リュカのキヤノンボール問題って知ってますか?私はさっき知りました笑
さて、今回はリュカのキヤノンボール問題をC言語で解きたいと思います。
「何それ?」って方はこちらのページをご覧ください。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#include <stdio.h> #include <stdlib.h> #include <math.h> void cannonBall(int max,int ans[2][255]); void main(int argc, char *argv[]) { int ans[2][255]; cannonBall(atol(argv[1]),ans); for(int cnt=1;ans[0][cnt]!=NULL;cnt++){ printf("N = %d\tM = %d\n",ans[0][cnt],ans[1][cnt]); } return; } void cannonBall(int max,int ans[2][255]){ int num=0; double total=0; for(int cnt=0;cnt<255;cnt++) ans[0][cnt]==0; for(int cnt1=1;cnt1<max;cnt1++){ for(int cnt2=1;cnt2<cnt1;cnt2++){ total+=cnt2*cnt2; } double sqRoot = sqrtl(total); if(sqRoot - floor(sqRoot)==0){ ans[0][num]=cnt1 - 1; ans[1][num]=sqRoot; num++; } total=0; } ans[0][num]=NULL; return; } |
今回の自作関数は、引数は2つで
- 0からの求める最大値
- 答えを格納する二次配列
です。
ans[0]には砲弾を積む段数を、ans[1]には平方根が格納されるようになっています。
10000で実行しましたが、1と24でしか証明できませんね…
単純なプログラムですが、参考になればと思います!
今回のブログ曲
今回投稿中に聴いていた曲はこちら!