結果

問題 No.294 SuperFizzBuzz
ユーザー MoritaYasuaki
提出日時 2016-05-09 03:55:01
言語 C90
(gcc 12.3.0)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,082 bytes
コンパイル時間 167 ms
コンパイル使用メモリ 26,496 KB
最終ジャッジ日時 2025-01-28 12:24:27
合計ジャッジ時間 710 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
main.c: In function 'main':
main.c:43:9: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
   43 |         for (int nfive = 3; nfive <= rank; nfive+=3)
      |         ^~~
main.c:43:9: note: use option '-std=c99', '-std=gnu99', '-std=c11' or '-std=gnu11' to compile your code

ソースコード

diff #

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

#define int ptrdiff_t
#define div lldiv
#define div_t lldiv_t
#define abs(a) ((a)<0?-(a):(a))
#define min(a,b) ((a)<(b)?(a):(b))

int N;
int conb(int n, int r) {
    int p = 1;
    int q = 0;
    while (r--)
        p=p*n--/++q;
    return p;
}

int check(int a, int rank) {
    int t = 0;
    if (a%2 == 0) return 0;
    while (rank--)
        if (a & (1ULL << rank))
            t++;
    return t%3 == 0;
}

void print(int a, int rank) {
    while (rank--)
        if (a & (1ULL << rank))
            putchar('5');
        else
            putchar('3');
    printf("\n");
}

main() {
    scanf("%td\n", &N);
    int rank = 3;
    for (rank = 3; ; rank++) {
        int t = 0;
        for (int nfive = 3; nfive <= rank; nfive+=3)
            t += conb(rank-1, nfive-1);
        if (t < N) {
            N-=t;
        } else {
            break;
        }
    }
    int a=0;
    do {
       if (check(a, rank))
           if (--N == 0)
               break;
       a++;
    } while(1);
    print(a, rank);
    return 0;
}
0