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