CodeChef JNTUV1(找规律)

题目大意:
给你这样一个序列3, 4, 33, 34, 43, 44, 333, 334, 343, 344, 433, 434, 443, 444, 3333, 3334, 3343, 3344……..,找到其中的规律,输入n,输出对应的数字。

解析:
可以把这个序列等价于一个二进制0, 1, 00, 01, 10, 11,模拟这个序列的生成就ok了。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int N = 105;
char buf[N];
int n;
int main() {
    while(scanf("%d", &n) != EOF) {
        memset(buf, 0, sizeof(buf));
        int bit = 2;
        while(n - bit > 0) {
            n -= bit;
            bit *= 2;
        }
        int end = log2(bit);
        for(int i = 0; i < end; i++) {
            buf[i] = '3';
        }
        n--;
        for(int i = end-1; n; i--) {
            if(n & 1) {
                buf[i] = '4';
            }
            n /= 2;
        }
        puts(buf);
    }
    return 0;
}

你可能感兴趣的:(CodeChef JNTUV1(找规律))