1564: [蓝桥杯2021初赛] 杨辉三角形与空间与相乘

 杨辉三角形

下面的图形是著名的杨辉三角形:


如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:
1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ...
给定一个正整数N,请你输出数列中第一次出现N 是在第几个数?

输入格式

输入包含T行,表示T组测试数据。T不超过10。
每行输入一个整数N,N不超过10^9。

输出格式

对于每组测试数据输出一行表示答案。

输入样例 

2
3
6

输出样例 

8
13
#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>

using namespace std;

typedef long long ll;


int n;
ll fun(int a, int b)
{
    ll res = 1;
    for(int i = a, j = 1; j <= b; i -- ,j ++ )
    {
        res = res * i / j;
        if(res > n) return res;
    }
    return res;
}

bool check(int k)
{
    ll l = k * 2;
    ll r = max((ll)n, l);
    while(l < r)
    {
        ll mid = l + r >> 1;
        if(fun(mid, k) >= n)
        {
            r = mid;
        }
            else l = mid + 1;
    }

    if(fun(r, k) != n) return 0;

    cout << r * (r + 1) / 2 + k + 1 << endl;
    return 1;
}
int main()
{
    scanf("%d", &n);
    for(int i = 16; i >= 0; i -- )
    {

        if(check(i))
        {
            return 0;
        }
    }
    return 0;
}




空间

小蓝准备用256MB 的内存空间开一个数组,数组的每个元素都是32 位二进制整数。
如果不考虑程序占用的空间和维护内存需要的辅助空间,请问256MB 的空间可以存储多少个32 位二进制整数?

#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
    //1MB=1024KB
    //1KB=1024B
    //1B=8b;
    //B:byte字节
    //b:bit比特(1位=1比特)
    //32位=4B
    //题解的意思是有多少个32位
    //转化成long long避免数据溢出
    cout<<(long long)256*1024*1024*8/32;
  return 0;
}

相乘

小蓝发现,他将 1 至 1000000007 之间的不同的数与 2021 相乘后再求除以 1000000007 的余数,会得到不同的数。 
小蓝想知道,能不能在 1 至 1000000007 之间找到一个数,与 2021 相乘后 再除以 1000000007 后的余数为 999999999。
如果存在,请在答案中提交这个数; 如果不存在,请在答案中提交 0。

#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>

using namespace std;

typedef long long ll;

int main()
{
    ll  n = 1000000007;
    ll i = 1;
    while(1)
    {
        if((n * i + 999999999) % 2021 == 0)
        {
            cout << ((n * i + 999999999) / 2021);
            return 0;
        }
        i ++;
    }
    return 0;
}



猜你喜欢

转载自blog.csdn.net/aasd23/article/details/124934697