杨辉三角形
下面的图形是著名的杨辉三角形:
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:
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;
}