[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 04/11 16:12 / Filesize : 123 KB / Number-of Response : 402
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

プログラマーなら「FizzBuzz問題」解けるよな?



1 名前:(´・ω・`) ◆Hc1VAagKMg [2008/04/29(火) 20:06:06 ]
1から100までの数をプリントするプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

言語自由

165 名前:仕様書無しさん mailto:sage [2009/04/25(土) 06:37:45 ]
15個並べたのか

166 名前:164 mailto:sage [2009/04/25(土) 07:30:10 ]
FizzBuzzを実装できるほど優秀なプログラマであるお前らに聞きたいんだが、
最初はfb(),f(),b(),n()といった関数の戻り値を関数ポインタにして
関数自身に次の関数を返させることで循環リストを作るつもりだったんだ。

func_type f1(){ do_something;return f2;}
func_type f2(){ do_something;return f3;}
func_type f3(){ do_something;return f1;}

func_type fp=f1;
fp=fp();
fp=fp();
fp=fp();
...

でもfunc_typeをどう宣言していいかわからなかったのでf_listなんてクラスを導入せざるを得なかった。
func_typeはどうやって宣言すればいいの?そもそも無理なの?


167 名前:仕様書無しさん mailto:sage [2009/04/26(日) 19:02:12 ]
def Fizz(x):
    return 'Fizz'
def Buzz(x):
    return 'Buzz'
def FizzBuzz(x):
    return 'FizzBuzz'
def N(x):
    return x
print ','.join([str([FizzBuzz, N, N, Fizz, N, Buzz, Fizz, N, N, Fizz, Buzz, N, Fizz, N, N][i % 15](i)) for i in range(1,101)])

168 名前:仕様書無しさん mailto:sage [2009/04/26(日) 19:17:12 ]
あ〜…投稿しておいてなんだけど、str()はN(x)の中に書いた方が良かったか。
ついでに読みやすく分解。

def Fizz(x):
    return 'Fizz'
def Buzz(x):
    return 'Buzz'
def FizzBuzz(x):
    return 'FizzBuzz'
def N(x):
    return str(x)

func_list = [FizzBuzz, N, N, Fizz, N, Buzz, Fizz, N, N, Fizz, Buzz, N, Fizz, N, N]

def mapfunc(i):
    func = func_list[i % 15]
    return func(i)

ary = map(mapfunc, range(1,101))

print ','.join(ary)

169 名前:仕様書無しさん mailto:sage [2009/04/26(日) 22:49:00 ]
%sed 's/ /\  /g' fizzbuzz.cs
using System;

class Program {
    static void Main() {
        for (int n = 1, c3 = 1, c5 = 1; n <= 100; n++, c3++,
c5++) {
            bool fizz = c3 == 3;
            bool buzz = c5 == 5;
            if (fizz) {
                Console.Write("Fizz");
                c3 = 0;
            }
            if (buzz) {
                Console.Write("Buzz");
                c5 = 0;
            }
            if (! (fizz || buzz))
                Console.Write(n);
            Console.WriteLine();
        }
    }
}

170 名前:仕様書無しさん mailto:sage [2009/05/16(土) 01:04:18 ]
#include<stdio.h>

int main(void)
{
for(int i=1;i<=100;++i)
{
if(!(i%15))puts("Fizz Buzz");
else if(!(i%5))puts("Buzz");
else if(!(i%3))puts("Fizz");
else printf("%d\n",i);
}
return 0;
}

初心者がちょっとそれっぽく書いてみた

171 名前:仕様書無しさん mailto:sage [2009/05/16(土) 22:57:37 ]
>>170
それっぽくはあるけど、良いコードじゃないぞ
実装するなら、実装意図を明確にするべきで、

if (!(i%15))

この記述で無理矢理論理判断に持ち込むのは、良くない例
たしかにコレでも動くけども、
このコードでは 15で割ったあまりが ==0である、ことに意味がある
関数の戻りが0/1で戻ってくるから、それを論理判断にしているわけではない
そこをはき違えると、意図が不明確で、他人が読みづらいコードになる

172 名前:仕様書無しさん mailto:sage [2009/05/17(日) 23:12:18 ]
Cでは当たり前の記述だがな。

173 名前:仕様書無しさん mailto:sage [2009/05/17(日) 23:32:19 ]
XXでは当たり前、で思考停止してるから、糞コードが減らないんじゃね?w



174 名前:仕様書無しさん mailto:sage [2009/05/17(日) 23:36:21 ]
コードに15という定数を使っているのは今一

175 名前:仕様書無しさん mailto:sage [2009/05/18(月) 21:52:46 ]
#include<stdio.h>

int main(void)
{
for(int i=1;i<=100;++i)
{
if(i%3==0&&i%5==0)
puts("Fizz Buzz");
else if(i%5==0)
puts("Buzz");
else if(i%3==0)
puts("Fizz");
else
printf("%d",i);
}
}

初心者が意見を取り入れて普通に書いた

176 名前:仕様書無しさん mailto:sage [2009/05/20(水) 20:57:48 ]
#include<stdio.h>

#define FIZZ_MOD_NUMBER 3
#define BUZZ_MOD_NUMBER 5
#define IS_FIZZ_NUMBER(x) ((x)%FIZZ_MOD_NUMBER==0)
#define IS_BUZZ_NUMBER ((x)%BUZZ_MOD_NUMBER==0)
#define IS_FIZZ_BUZZ_NUMBER(x) (IS_FIZZ_NUMBER(x) && IS_BUZZ_NUMBER(x))
#define FIZZ_STRING "Fizz"
#define BUZZ_STRING "Buzz"
#define FIZZBUZZ_STRING FIZZ_STRING " " BUZZ_STRING

int main()
{


177 名前:仕様書無しさん mailto:sage [2009/05/20(水) 20:59:00 ]
途中で書き込んじまったorz
修正するのもメンドクサイから放置しよ。


178 名前:仕様書無しさん mailto:sage [2009/06/20(土) 18:14:32 ]
多分最速、既出?
#include <stdio.h>
void main(void)
{
int i=0,end=100;
for(;;){
i++; printf("%d\n",i); //if(i==end)break;
i++; printf("%d\n",i); //if(i==end)break;
i++; printf("Fizz\n"); //if(i==end)break;
i++; printf("%d\n",i); //if(i==end)break;
i++; printf("Buzz\n"); //if(i==end)break;
i++; printf("Fizz\n"); //if(i==end)break;
i++; printf("%d\n",i); //if(i==end)break;
i++; printf("%d\n",i); //if(i==end)break;
i++; printf("Fizz\n"); //if(i==end)break;
i++; printf("Buzz\n"); if(i==end)break;
i++; printf("%d\n",i); //if(i==end)break;
i++; printf("Fizz\n"); //if(i==end)break;
i++; printf("%d\n",i); //if(i==end)break;
i++; printf("%d\n",i); //if(i==end)break;
i++; printf("FizzBuzz\n"); //if(i==end)break;
};
}

179 名前:178 mailto:sage [2009/06/20(土) 18:19:20 ]
あー、
100個の結果をそのままprintfした方が早いか... orz
私がバカでした

180 名前:仕様書無しさん mailto:sage [2009/06/20(土) 18:27:44 ]
これ最強。
#include <stdio.h>
void main(void)
{
printf(
"1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,FizzBuzz,16,17,Fizz,19,Buzz,Fiz"
"z,22,23,Fizz,Buzz,26,Fizz,28,29,FizzBuzz,31,32,Fizz,34,Buzz,Fizz,37,38,Fizz,Buzz"
",41,Fizz,43,44,FizzBuzz,46,47,Fizz,49,Buzz,Fizz,52,53,Fizz,Buzz,56,Fizz,58,59,Fi"
"zzBuzz,61,62,Fizz,64,Buzz,Fizz,67,68,Fizz,Buzz,71,Fizz,73,74,FizzBuzz,76,77,Fizz"
",79,Buzz,Fizz,82,83,Fizz,Buzz,86,Fizz,88,89,FizzBuzz,91,92,Fizz,94,Buzz,Fizz,97,"
"98,Fizz,Buzz"
);
};

181 名前:仕様書無しさん mailto:sage [2009/07/11(土) 07:42:40 ]
main(i){for(;i<101;puts("Buzz"-i*i++%5))printf(i%3?i%5?"%d":0:"Fizz",i);}

182 名前:仕様書無しさん mailto:sage [2009/07/12(日) 04:57:48 ]
>void main(void)
ここで既に警告が出てるぞ。

183 名前:仕様書無しさん mailto:sage [2009/08/04(火) 19:56:50 ]
@echo off
setlocal
set A=0

:LOOP
if %A% EQU 100 goto :END
set /a A=A+1
set /a B=A%%3
set /a C=A%%5
set /a D=B+C
if %D% EQU 0 goto :FB
IF %B% EQU 0 goto :FIZZ
IF %C% EQU 0 goto :BUZZ

echo %A%
goto :LOOP

:FIZZ
echo Fizz
goto :LOOP

:BUZZ
echo Buzz
goto :LOOP

:FB
echo FizzBuzz
goto :LOOP

:END
endlocal
@echo on



184 名前:183 mailto:sage [2009/08/04(火) 20:03:18 ]
>>183はDOS窓用バッチ



185 名前:cobol mailto:sage [2009/09/07(月) 17:08:09 ]
    identification division.
    program-id. fizzbuzz.
    environment division.
    data division.
    working-storage section.
    77 i pic 9(3).
    77 a pic 99.
    01 r3 pic 9.
     88 r3-zero value zero.
    01 r5 pic 9.
     88 r5-zero value zero.
    procedure division.
      perform varying i from 1 by 1 until i > 100
        perform fizzbuzz
      end-perform.
      stop run.
    fizzbuzz.
      divide
        3 into i giving a remainder r3
      end-divide
      divide
        5 into i giving a remainder r5
      end-divide
      if r3-zero and r5-zero then
        display "FizzBuzz" upon console
      else if r3-zero and not r5-zero then
        display "Fizz" upon console
      else if r5-zero and not r3-zero then
        display "Buzz" upon console
      else
        display i upon console
      end-if.

186 名前:仕様書無しさん mailto:sage [2009/09/08(火) 00:03:08 ]
無駄に長いなと思ったらCobolか...

187 名前:仕様書無しさん mailto:sage [2009/09/16(水) 20:54:30 ]
SQL見た時、なんか冗長だな〜COBOLみて〜、と思った。

188 名前:仕様書無しさん mailto:sage [2009/09/16(水) 23:18:17 ]
遊びがてら、出力が汚いのを作ってみた。後悔はしてない。(C言語)

(パターン1)

#include <stdio.h>
#include <memory.h>
int main(void)
{
int i = 0;
char buf[900+1];
char* ptr;
char* end = buf+900;
*end = '\0';
for (ptr=buf;ptr<end;ptr+=9) snprintf(ptr,9,"%6d \n",i++);
for (ptr=buf;ptr<end;ptr+=27) snprintf(ptr,6,"fizz ");
for (ptr=buf+4;ptr<end;ptr+=45) snprintf(ptr,4,"buzz");
printf(buf);
return 0;
}

189 名前:仕様書無しさん mailto:sage [2009/09/16(水) 23:19:50 ]
(パターン2)

#include <stdio.h>
#include <memory.h>
int main(void)
{
//fi zz bu zz _ 1 _ 2 _ fi zz _ 4 _ bu zz _ fi zz _ 7 _ 8 _ fi zz _ bu zz _ 11 _ fi zz _ 13 _ 14 _
char* a = "243410101241013412410101241341012410101";
char* b[5] = {"00","\r\n","fi","bu","zz"};
char* p = a;
while (b[0][0]<='9')
{
 if (*p=='1')
 {
   b[0][0] += (b[0][1]-'0' + 1)/10;
   b[0][1] = '0' + (b[0][1]-'0'+1) % 10;
 }
 printf(b[*p++-'0']);
 if (!*p) p = a;
}
return 0;
}


190 名前:仕様書無しさん mailto:sage [2009/09/17(木) 21:36:42 ]
なんでこの問題が有名なのかイマイチわからんのだが、
重複さえ気をつければ他に別にひっかけがあるようなもんでは無いよね。

191 名前:仕様書無しさん mailto:sage [2009/09/17(木) 22:03:23 ]
引っかけがあるように見えるので、しばらく考えるが、
実は、引っかけがないことに気付く。

これが、最大の引っかけ。

192 名前:仕様書無しさん mailto:sage [2009/09/17(木) 23:17:09 ]
>>190-191
そもそもプログラマとしての素養を見るための問題の例として挙げられたものだから
引っかけとか特に必要ないんだよ

193 名前:仕様書無しさん mailto:sage [2009/09/18(金) 23:12:18 ]
普通のプログラマなら2分以内で書けて当たり前という程度には簡単。



194 名前:仕様書無しさん mailto:sage [2009/09/19(土) 14:18:17 ]
「2分」ってよく言われるけど、
「問題用紙をめくって下さい」から、「動作確認終わりました」まで、
必ずしも2分以内に終わらないよ。
特に、自分が普段はあまり使っていないような言語では。

問題文見て、面食らってる時間とか、
改行コードの出力、全パターンで共用した方がいいのかどうか思案する時間とか、
インクルード文なんだっけ、main関数の戻り値にvoid許可されてたっけとか、
Javaのクラスパスが通ってないとかw

2分以内と言ってる人は、何度も書いてるから、2分で出来るようになっただけ。

195 名前:仕様書無しさん mailto:sage [2009/09/19(土) 14:31:04 ]
んなこたーどうでもいいんだよ

196 名前:仕様書無しさん [2009/09/19(土) 14:43:36 ]
FizzBuzz

197 名前:仕様書無しさん mailto:sage [2009/09/19(土) 14:45:47 ]
195取られた

198 名前:仕様書無しさん mailto:sage [2009/09/20(日) 15:04:59 ]
>>194
ん?言語の指定はないんだが……

199 名前:仕様書無しさん mailto:sage [2009/09/20(日) 20:44:10 ]
>>194
FizzBuzzの2分は誤訳だってよ。

200 名前:仕様書無しさん mailto:sage [2009/09/20(日) 22:37:29 ]
#pythonのリストコンプリヘンションで遊んでみた

def nvl(x,y):
  if x: return x;
  return y;

fizz = (['','','fizz']*100)[0:100];
buzz = (['','','','','buzz']*100)[0:100];
num = map(lambda x:str(x),range(1,101));

print map(nvl,map(lambda x,y:x+y,fizz,buzz),num);

201 名前:仕様書無しさん mailto:sage [2009/09/20(日) 23:13:31 ]
ちょっとだけ、悪ノリ。(C言語)

#include <stdio.h>
#include <memory.h>
int main(void)
{
int i;
char buf[8];
printf("<html><head><title>クソスレ</title></head><body><dl>");
for (i=1;i<=1001;i++)
{
  char* s1, *s2, *s3, *s4;
  sprintf(buf,"%d",i);
  s2 = "blue";
  s3 = " ";
  s4 = "投稿日: 2009/09/20(日) 23:59:59 ID:FizzBuzz";
  if (i%1001==0) { s1 = "このスレッドは1000を超え(ry"; s2="green"; s4="投稿日: Over 1000 Thread"; }
  else if (i%15==0) { s1 = "fizzbuzz"; s3="[fizzbuzz]"; }
  else if (i%3==0) { s1 = "fizz"; s3="[fizz]"; }
  else if (i%5==0) { s1 = "buzz"; s3="[buzz]"; }
  else { s1 = buf; s2 = "green"; s3 = " "; }
  printf("<dt>%d 名前:<font color=\"%s\"><b>仕様書無しさん</b>%s</font> %s</dt> ",i,s2,s3,s4);
  printf("<dd style=\"padding:1em 0em\";>%s</dd>",s1);
}
printf("</dl></body></html>");
return 0;
}

202 名前:仕様書無しさん mailto:sage [2009/09/21(月) 11:41:01 ]
>>192
プログラマの素養が関係ないような問題で素養を見ようとする意図って何なんだろうな。
結局、元のブログ主の?話題づくりに利用されているだけな気が知る

203 名前:仕様書無しさん mailto:sage [2009/09/21(月) 12:19:30 ]
元ネタ知らずにレスしてる香具師いたのか。




204 名前:ぅゅ ◆e6.oHu1j.o [2009/09/22(火) 12:13:28 ]
この問題って日本のものじゃないよね
海外っていうとレベル高そうにおもえるけど実はそうでもないんじゃ

205 名前:仕様書無しさん mailto:sage [2009/09/22(火) 12:19:23 ]
PowerShellバージョンが最強だな

206 名前:仕様書無しさん mailto:sage [2009/09/22(火) 19:19:48 ]
>>202
この問題すら解けない奴がいるって事なんじゃまいか?

207 名前:仕様書無しさん mailto:sage [2009/09/23(水) 00:08:33 ]
>>202
たとえ時間を充分にかけても正答にたどり着けないような人が
現実にはたくさん面接に来るんだよ
素養があるかどうかを見るんではなくて
素養がまるでない人をふるい落とすための簡易的な試験という位置づけ

208 名前:仕様書無しさん [2009/09/23(水) 00:23:36 ]
Fortran90

program hoge
implicit none
integer :: i
do i=1,200
if (mod(i,15).eq.0) then
print *,'Fizz Buzz'
else if (mod(i,5).eq.0) then
print *,'Buzz'
else if (mod(i,3).eq.0) then
print *,'Fizz'
else
print *,i
end if
end do
end program hoge

209 名前:仕様書無しさん mailto:sage [2009/09/24(木) 12:59:58 ]
>>203
>>1 のリンク先すら読まない莫迦が
そんだけ沢山いるってことでしょうな。

210 名前:仕様書無しさん mailto:sage [2009/09/24(木) 16:41:34 ]
スレタイ嫁、1嫁だけなら分かるけど、
1のリンク先まで必須となると、何か違うような気がする。

あと、何ていうか、「リンク先まで嫁」と、「2分以内」って、同じ部類のように思える。
自分の脳内ででっち上げた完璧さを、周囲の人に対して、期待している点において。
嫌味な言い方をすれば、配慮や謙虚さが足りないって言うか。

211 名前:仕様書無しさん mailto:sage [2009/09/25(金) 03:28:04 ]
それをたらたら書いてる時間でリンク先読むのは十分可能だよな?
元ネタは採用試験の話だ、くらいはFizzBuzzより簡単にわかるよな。
配慮や謙虚さが足りないって、むしろそっちじゃないのか。
嫌味な言い方だがな。

212 名前:仕様書無しさん mailto:sage [2009/09/25(金) 15:11:26 ]
情報の提示の仕方が悪い、
ボクちゃんは悪くない、おまえが悪い、おまえの教え方が悪い


というのは、典型的なゆとり脳の主張ですw

213 名前:仕様書無しさん [2009/10/19(月) 21:26:19 ]
出来るだけ短く
ここで一応動いたよ。→codepad.org/

#include <stdio.h>
#define p printf
main(){int i;for(i=1;i<=100;i++)if(!p("%s",p("%s%s",i%3?0:"Fizz",i%5?0:"Buzz")?"\n":0))p("%d\n",i);}





214 名前:仕様書無しさん mailto:sage [2009/10/19(月) 22:09:10 ]
これはコードゴルフじゃないんだぜ。

実行環境はなし。もしコンパイルが通らない、結果が間違っていたらその場で銃殺。

というシビアな条件で最も間違いにくいコードに最高得点をあげたい。

215 名前:仕様書無しさん [2009/10/19(月) 22:28:45 ]
その条件だと、HQ9F+で書くのが、最強か?
ttp://cfs.maxn.jp/neta/HQ9F+.html

※元になったのはHQ9+という、ネタ言語。
  Hと入力すれば、Hello worldを出力してくれる。
  ttp://ja.wikipedia.org/wiki/HQ9%2B

216 名前:コード書き忘れた mailto:sage [2009/10/19(月) 22:30:41 ]
++++++++++f

私の個人的な意見になるけど、
Fの一文字で、FizzBuzzを出力できるようにした方が、HQ9+っぽいと思うんだけどね。

217 名前:仕様書無しさん mailto:sage [2009/10/19(月) 22:45:37 ]
Cで書いたら緊張のあまりセミコロン忘れてあぼーんだなw

218 名前:Go mailto:sage [2009/11/17(火) 17:06:00 ]
package main

import "fmt"

func main() {
 for i:=1;i<101;i++ {
  s:="";
  if i%3==0 { s+="Fizz" }
  if i%5==0 { s+="Buzz" }
  if s=="" { s=fmt.Sprintf("%d",i) }
  fmt.Printf(s+"¥n")
 }
}


219 名前:仕様書無しさん mailto:sage [2009/11/17(火) 19:50:32 ]
何度見ても気持ち悪い文法だなあ

220 名前:仕様書無しさん mailto:sage [2009/11/18(水) 05:13:33 ]
for i in range(100):
if (i % 3) == 0 and (i % 5) == 0:
print u'FizzBuzz'
elif (i % 3) == 0:
print u'Fizz'
elif (i % 5) == 0:
print u'Buzz'
else:
print i


221 名前:うゆ ◆e6.oHu1j.o mailto:sage [2009/12/03(木) 05:10:19 ]

100.times do |n|
 str = String.new
 str = n%15==0?:fizzbuzz:n%5==0?:fizz:n%3==0?:buzz:""
 print "%03d:%s\n" % [n,str]
end

222 名前:仕様書無しさん mailto:sage [2010/04/21(水) 22:59:37 ]
剰余(割り算の余り)を出すのに演算子の % 以外で計算できますか?
% を忘れると大変だぞ!


223 名前:仕様書無しさん [2010/04/21(水) 23:31:11 ]
剰余 % を忘れたときに使える方法だと思う。
この問題で肝心なところは % と 「かつ」の && だな。あー恥ずかしい

class TestFizBuz {
public void mes() {
int int3 = 0;
int int5 = 0;
for (int i = 1; i <= 100; i++) {

if (int3 < i/3 && int5 < i/5) {
System.out.println("FizzBuzz: " + i);
int3 = i/3;
int5 = i/5;
} else if (int3 < i/3) {
System.out.println("Fizz: " + i);
int3 = i/3;
} else if (int5 < i/5) {
System.out.println("Buzz: " + i);
int5 = i/5;
} else {
System.out.println(i);
}

}
}
public static void main(String[] args) {
TestFizBuz tfb = new TestFizBuz();
tfb.mes();
}
}



224 名前:仕様書無しさん mailto:sage [2010/04/22(木) 00:07:26 ]
向こうの子供はハッキングしまくりだってのにお前らときたら…

【調査】13歳までにハッキングをした経験した34%――米英の若者の実態調査(10/04/15)
pc11.2ch.net/test/read.cgi/pcnews/1271336569/

225 名前:仕様書無しさん mailto:sage [2010/04/22(木) 02:12:40 ]
>>221-223
うゆw問題からしてわかってねぇwwさすが天才www
"mes"w "kard"とおんなじwwメソッドwww

226 名前:仕様書無しさん [2010/04/23(金) 00:56:20 ]
>>225
223は動作は当たっているんじゃない。
% を使用しない方法ではこれでいいんじゃない?

227 名前:仕様書無しさん mailto:sage [2010/04/23(金) 01:42:01 ]
>>224
それってさ、漏れパスを使ったとか
正しい言い方忘れたが、「スクリプト使用のガキ」も含んででない?

228 名前:仕様書無しさん mailto:sage [2010/04/23(金) 01:44:07 ]
Script kiddie ?

229 名前:仕様書無しさん mailto:sage [2010/04/23(金) 02:07:26 ]
>>226
%を使う使わない以前に結果を他のコードと比べるくらいなぜできない?
数学のテストで「計算結果は違うけど式はあってますよね」とか言うクチか。


230 名前:仕様書無しさん mailto:sage [2010/04/23(金) 02:59:12 ]
%を忘れたwという変な条件を入れたとしても、
int reminder(int divisor, int dividend)
みたいな相当するメソッドを作るだろふつー。
直近の3と5の倍数を保持して商と比べるなんてせんでも。
void型のメソッドしか認めんwのなら別だけどさ。

231 名前:仕様書無しさん mailto:sage [2010/04/23(金) 14:41:46 ]
>>229
結果は当たっているよ。書き方の問題ね。


232 名前:仕様書無しさん mailto:sage [2010/04/23(金) 14:57:18 ]
>>1
>1から100までの数をプリントするプログラムを書け。
>ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

とあるのに3や5をプリントアウトしたらただの間違いだろ。
問題をちゃんと読んでねぇアホじゃねーか。

233 名前:231 mailto:sage [2010/04/23(金) 15:26:12 ]
>>232
あー そこか




234 名前:仕様書無しさん mailto:sage [2010/04/24(土) 03:25:23 ]
223に感動した。
コード読んでも、何やってるのかワカランかったが、
int3, i/3, int5, i/5 の値を出力してみたら、発想の奇抜さにたまげた。

235 名前:234 mailto:sage [2010/04/24(土) 03:33:23 ]
233の計算テクはそのままで、変数int3,int5を取り去ったコード。

if ((i-1)/3!=i/3 && (i-1)/5!=i/5)
    { printf("FizzBuzz\n"); }
else if ((i-1)/3!=i/3)
    { printf("Fizz\n"); }
else if ((i-1)/5!=i/5)
    { printf("Buzz\n"); }
else
    { printf("%d\n",i); }


236 名前:仕様書無しさん mailto:sage [2010/04/24(土) 03:35:25 ]
訂正 ×233 ○223

あと、if ((i-1)/15!=i/15) でOKだ。

237 名前:仕様書無しさん mailto:sage [2010/04/24(土) 03:59:03 ]
iが正の整数なら剰余%は除数xについてi-(int(i/x)*x)なんだから当たり前じゃん。
%を忘れてどうこうってのがどうかしてる。馬鹿?

238 名前:仕様書無しさん mailto:sage [2010/04/24(土) 10:03:06 ]
%を忘れた人のため:その2

#include <stdio.h>
int rem3is0[16]={1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1};
int rem5is0[16]={1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1};

int compact( unsigned int n ) {
 n = ( n & 0x0f0f0f0f ) + ((n>>4)&0x0f0f0f0f);
 n = ( n & 0x00ff00ff ) + ((n>>8)&0x00ff00ff);
 n = ( n & 0x0000ffff ) + ((n>>16)&0x0000ffff);
 return ( n > 15 )? compact(n): n;
}

#define N 100
int main( ) {
 unsigned int i;
 for( i = 1; i <= N; ++i ) {
  int j = compact(i);
  if( rem3is0[j] & rem5is0[j] ) {
   printf( "FizzBuzz " );
  }
  else if( rem3is0[j] ) {
   printf( "Fizz " );
  }
  else if( rem5is0[j] ) {
   printf( "Buzz " );
  }
  else {
   printf( "%i ", i );
  }
 }
}

239 名前:仕様書無しさん mailto:sage [2010/04/24(土) 10:14:09 ]
修正: "%i " → "%u "

240 名前:仕様書無しさん mailto:sage [2010/04/24(土) 13:09:56 ]
>238の応用
その3 ifも忘れた人のため

#include <stdio.h>

char *fz[16]={"","%u ","%u ","Fizz ","%u ","Buzz ","Fizz ",
    "%u ","%u ","Fizz ","Buzz ","%u ","Fizz ","%u ","%u ","FizzBuzz "};
 
int compact( unsigned int n ) {
 n = ( n & 0x0f0f0f0f ) + ((n>>4)&0x0f0f0f0f);
 n = ( n & 0x00ff00ff ) + ((n>>8)&0x00ff00ff);
 n = ( n & 0x0000ffff ) + ((n>>16)&0x0000ffff);
 return ( n > 15 )? compact(n): n;
}

#define N 100
int main( ) {
 unsigned int i;
 for( i = 1; i <= N; ++i )printf( fz[compact(i)],i);
}


241 名前:仕様書無しさん mailto:sage [2010/04/24(土) 13:23:30 ]
>>240
いや、それだとこれと変わらなくて興が削がれるからだめだろ。
#include <stdio.h>
char *fz[16]={"","%u ","%u ","Fizz ","%u ","Buzz ","Fizz ",
"%u ","%u ","Fizz ","Buzz ","%u ","Fizz ","%u ","%u ","FizzBuzz "};
int main( ) {
 unsigned int i;
 for( i = 1; i <= 100; ++i )printf( fz[i-i/15*15],i);
}


242 名前:仕様書無しさん mailto:sage [2010/04/24(土) 13:35:29 ]
あまり変わらんけど関数テーブル版

#include <stdio.h>
#include <stdint.h>

void fb(uint32_t x){ printf( "FizzBuzz " ); }
void f(uint32_t x){ printf( "Fizz " ); }
void b(uint32_t x){ printf( "Buzz " ); }
void n(uint32_t x){ printf( "%lu ", (unsigned long)x ); }

void (*fn[4])(uint32_t) = { n, b, f, fb };
const uint32_t FN = 0xc1241843;

unsigned int compact( uint32_t n ) {
 n = ( n & 0x0f0f0f0f ) + ((n>>4)&0x0f0f0f0f);
 n = ( n & 0x00ff00ff ) + ((n>>8)&0x00ff00ff);
 n = ( n & 0x000000ff ) + ((n>>16)&0x000000ff);
 n = ( n & 0x0000000f ) + ((n>>4)&0x0000000f);
 n = ( n & 0x0000000f ) + ((n>>4)&0x0000000f);
 return n;
}

#define N 100
int main( ) {
 for( uint32_t i = 1; i <= N; ++i ) {
  (*fn[(FN>>compact(i)*2)&3])(i);
 }
}

243 名前:仕様書無しさん mailto:sage [2010/04/24(土) 21:33:16 ]
これはすごいね。
15回に1回ごとに3と5の倍数が来ることを想定して配列に代入しているという
理解でいいのかな。
class FizzBuzz {
static final String strFizBuz[] = {"","","Fizz ","","Buzz ","Fizz ",
"","","Fizz ","Buzz ","","Fizz ","","","FizzBuzz "};
public static void main(String[] args) {
int count = 0;
for (int i = 1; i <= 100; i++) {
if (strFizBuz[count].equals("")) {
System.out.println(i);
count++;
} else if (strFizBuz[count].equals("Fizz ") || strFizBuz[count].equals("Buzz ")) {
System.out.println(strFizBuz[count]);
count++;
} else if (strFizBuz[count].equals("FizzBuzz ")) {
System.out.println(strFizBuz[count]);
count = 0;
}
}
}
}

簡単にするとこれでもOKでしょ



244 名前:仕様書無しさん mailto:sage [2010/04/24(土) 22:55:00 ]
>243
>15回に1回ごとに3と5の倍数が来ることを想定して配列に代入しているという
>理解でいいのかな。

全然違う。
関数compactが15で割った余りを(%演算子無しで)計算しているのがポイント。
下から4bitづつに区切って(まぁ上からでも同じだけど)、それを全部足したものと元の値では
15で割った余りが同じになることを利用している。
なぜそうなるかはちょっと頭をしぼって考えてみな

245 名前:仕様書無しさん mailto:sage [2010/04/24(土) 23:07:38 ]
10進数でmod 9が各桁の値の和に等しいってのと同じ話か。
16進数で考えてみようと思ったことが無かったぜ。

246 名前:仕様書無しさん mailto:sage [2010/04/24(土) 23:53:32 ]
明らかに%演算子より知名度低そうな知識だな…

247 名前:243 mailto:sage [2010/04/25(日) 09:43:48 ]
>>244
違っていたか。しぼって考えてみます。

248 名前:(u_・y) ◆e6.oHu1j.o mailto:sage [2010/04/26(月) 04:48:47 ]
>>225
おれが過去にかいたコードを描いたときにかんがえてた事を
予想すると、お前のその意味不明なレスもなんとなくわかるよ

おれが適当に描いた部分は、 たとえ、プログラミング知らない奴でも修正できそうなレベルだ
っていうところまではわかるか??
だれにでも解ける場所とか、自分が過去に解いた場所は適当になる
それがuy。

その適当具合は、常軌を逸しているかもしれない
問題すら適当に読むか読まないし、コンパイルチェックもしないで2chに貼り付けたりもする
たとえそれが間違っていてもどうでもいいやという気分になる



まとめると:

おれは忙しいから
無駄なことに時間は使いたくない

249 名前:仕様書無しさん mailto:sage [2010/04/26(月) 05:26:25 ]
>>246
mod 9 = 0 の場合に限れば、「全桁の数字を足すと9の倍数になる数は9の倍数」
っていう中学生でも知ってる話だぜ。

250 名前:仕様書無しさん mailto:sage [2010/04/26(月) 08:13:08 ]
言い訳にもなってねえ
流石屑ニート様

251 名前:革命家[uy] ◆rT33C51l9k mailto:sage [2010/05/01(土) 21:52:31 ]
え・・・、って思った
よほどのヴぁかか、全然初心者レベルだろお前

252 名前:仕様書無しさん mailto:sage [2010/05/02(日) 00:20:36 ]
頭大丈夫?

253 名前:革命家[uy] ◆e6.oHu1j.o mailto:sage [2010/05/04(火) 10:42:56 ]
さっさと追いつけよのろま



254 名前:仕様書無しさん mailto:sage [2010/05/04(火) 13:54:14 ]
職歴なしニートにおいつくのはもう無理なんで。。

255 名前:仕様書無しさん mailto:sage [2010/05/07(金) 19:45:27 ]
using System;
public class FizzBuzzFormat : IFormatProvider, ICustomFormatter
{
    private static char[] Z = new char[] {'Z'};
    public object GetFormat(Type formatType)
    {
        return formatType == typeof(ICustomFormatter) ? this : null;
    }
    public string Format(string format, object arg, IFormatProvider provider)
    {
        if (format == null) return String.Format("{0}", arg);
        if (format.StartsWith("Z")) {
            int n = (int) arg;
            bool m3 = n % 3 == 0, m5 = n % 5 == 0;
            return m3 ? (m5 ? "FizzBuzz" : "Fizz")
                : (m5 ? "Buzz" : n.ToString());
        }
        if (arg is IFormattable)
            return ((IFormattable)arg).ToString(format, provider);
        return arg.ToString();
    }
}
public class FizzBuzz
{
    static void Main()
    {
        var fbf = new FizzBuzzFormat();
        for (var i = 1; i <= 100; i++)
            Console.WriteLine(String.Format(fbf, "{0:Z}", i));
    }
}

256 名前:仕様書無しさん [2010/05/23(日) 02:47:37 ]
for i=1,100 do
s =""
if( i % 3 == 0 )then s="Fizz" end
if( i % 5 == 0 )then s=s.."Buzz" end
if( s == "" )then s=i end
print( s )
end

安直だなぁ、自分。

257 名前:仕様書無しさん [2010/05/23(日) 04:13:08 ]
>>256

その方法が一番だよ
シンプルイズベスト
業務のプログラムであんまり凝ったコード書かれると困る

258 名前:仕様書無しさん mailto:sage [2010/05/26(水) 18:28:21 ]
割り算や余剰を使うと計算コストが高い。
平凡にカウンタを使うほうが早い。
正しく解くだけじゃなくて高速性を考えないといけないのにわかってないアホ多すぎ

259 名前:仕様書無しさん [2010/05/26(水) 20:40:51 ]
確かにそうだけど
今の時代はI/O関係なければそんなに速度なんて変わらないから
ぱっと見でわかりやすいほうがいいだろ
いつの時代だよ

260 名前:仕様書無しさん [2010/05/26(水) 22:45:50 ]
using System;
class FizzBuzz
{
    static void Main()
    {
        var a = new[] {
            new { Multiple = 3, Indication = "Fizz" },
            new { Multiple = 5, Indication = "Buzz" }
        };
        int[] c = new int[a.Length];
        for (int i = 1; i <= 100; i++) {
            bool fb = false;
            for (int j = 0; j < a.Length; j++) {
                if (++c[j] == a[j].Multiple) {
                    Console.Write(a[j].Indication);
                    c[j] = 0;
                    fb = true;
                }
            }
            Console.WriteLine(fb ? "" : i.ToString());
        }
    }
}

261 名前:仕様書無しさん mailto:sage [2010/05/27(木) 13:32:51 ]
>>258
その労力は、検索アルゴリズムの選択とか、枝刈りとか、効果出やすい所につぎこめよw
値を記憶するのは、どうしようもなく高速化最優先の場合か、せいぜい、三角関数のテーブル化あたりだね。

262 名前:仕様書無しさん mailto:sage [2010/05/28(金) 02:01:12 ]
Python、短絡評価とジェネレータ内包表記で。

def fizz(x):
 return x % 3 == 0 and 'Fizz' or ''

def buzz(x):
 return x % 5 == 0 and 'Buzz' or ''

def fizzbuzz(x):
 return ''.join((fizz(x), buzz(x))) or str(x)

print '\n'.join(fizzbuzz(x) for x in xrange(1, 101))

263 名前:仕様書無しさん mailto:sage [2010/05/31(月) 13:22:37 ]
Pythonでとりあえず標準的に書いてみる
見れば分かるとおり、無限ループするよ

i=0
while True:
print i,
if i%3==0:
print "Fizz",
if i%5== 0:
print "Buzz",
print '\n'
i=i+1



264 名前:仕様書無しさん mailto:sage [2010/05/31(月) 13:24:29 ]
あれ?スペースが消えた
あ、全角じゃないとだめなのか
スレ汚ししてすいません

265 名前:仕様書無しさん mailto:sage [2010/05/31(月) 13:29:59 ]
>>263-264
こう書きたかったんだろうけど、iの値が常に表示されてしまう

i=0
while True:
    print i,
    if i%3==0:
        print "Fizz",
    if i%5== 0:
        print "Buzz",
    print '\n'
    i=i+1






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<123KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef