結果
| 問題 | No.294 SuperFizzBuzz |
| コンテスト | |
| ユーザー |
MoritaYasuaki
|
| 提出日時 | 2016-05-09 03:57:30 |
| 言語 | C90(gcc12) (gcc 12.4.0) |
| 結果 |
AC
|
| 実行時間 | 522 ms / 5,000 ms |
| コード長 | 1,101 bytes |
| 記録 | |
| コンパイル時間 | 257 ms |
| コンパイル使用メモリ | 32,552 KB |
| 最終ジャッジ日時 | 2026-02-23 21:15:26 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 12 |
コンパイルメッセージ
main.c: In function ‘main’:
main.c:39:5: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
39 | scanf("%td\n", &N);
| ^~~~~~~~~~~~~~~~~~
ソースコード
#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(void) {
scanf("%td\n", &N);
int rank = 3;
for (rank = 3; ; rank++) {
int t = 0;
int nfive;
for (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;
}
MoritaYasuaki