このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 131代目 #481 # [1]C言語初級 # [2] 次のプログラムから仕様書を起こして、全く異なるアルゴリズム # で同じ処理をするものに書き換えよ # http://ime.nu/codepad.org/FjM5LBs9 # # 提示されたプログラムソース # # # C, pasted yesterday: # # #include # # int check(long l){ # if( l% 3==0) return 1; # while(l!=0){ # if(l % 10==3) return 1; # l/=10; # } # return 0; # } # # int main(void){ # long l; # for(l=1;l<10000*10000;l++) # if( check(l) ) printf("%ld%c",l,10); # return 0; # # } # %%%%%%%%%%%%%%%% 遡行した仕様 %%%%%%%%%%%%%%%%%%% 要求仕様 1から10000*10000までの範囲の整数Nが以下の条件を満たす時、 1) Nが3の倍数 2) Nを10進表示した時にどこかの桁に3が現れる 全てのNを昇順に整列して、順序番号を付加して表示せよ。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '3の倍数であるか、10進数表記で3が現れる' :- '3の倍数であるか、10進数表記で3が現れる'(1,1). '3の倍数であるか、10進数表記で3が現れる'(_,100000000) :- !. '3の倍数であるか、10進数表記で3が現れる'(_順序番号,N) :- '3の倍数であるか、10進数表記で3が現れるかの判定'(N), _順序番号_2 is _順序番号 + 1, N2 is N + 1, '3の倍数であるか、10進数表記で3が現れる'(_順序番号_2,N2),!. '3の倍数であるか、10進数表記で3が現れる'(_順序番号,N) :- N2 is N + 1, '3の倍数であるか、10進数表記で3が現れる'(_順序番号,N2). '3の倍数であるか、10進数表記で3が現れるかの判定'(N) :- N < 3,!,fail. '3の倍数であるか、10進数表記で3が現れるかの判定'(N) :- 0 is N mod 3,!. '3の倍数であるか、10進数表記で3が現れるかの判定'(N) :- N2 is N // 10, '3の倍数であるか、10進数表記で3が現れるかの判定'(N2).