解析:把256MB换算为字节单位:256/1024/1024,然后再算
cout << 256 * 1024 * 1024 / 4 << endl;
当输入11的时候三个1已经用完了 1,2,3,4,5,,,,,7,8,9,10,11
所以此时只能输出10,也就是输出11-1
- 初始化一个数组
s,其索引从0到9,每个元素的值都是2021。这表示你有2021个0,2021个1,依此类推,直到你有2021个9。 - 在无限循环中,从数字1开始检查每一个数字,看它是否可以被表示为数组
s中数字的组合。这是通过check函数来完成的。 check函数通过取模运算和整数除法来逐个检查数字的每一位。每个数都取个位数,如果个位数-1<0,说明不够减,返回false- 如果找到一个数字不能被表示,就输出前一个数字并退出程序。
int s[10];
bool check(int x) {
while (x) {
int t = x % 10;
x /= 10;
if (--s[t] < 0)
return false;
}
return true;
}
int main() {
for (int i = 0; i < 10; i++) {
s[i] = 2021;
}
for (int i = 1;; i++) {
if (!check(i)) {
cout << i - 1 << endl;
return 0;
}
}
return 0;
}
暂停
解析:
把n的所有因数全部,枚举出来,放到一个vector里面,
然后用三个for循环把所有情况列举出来,
如果是一种方案,计数器就加1:
typedef long long ll;
int main() {
vector<ll> d;
ll n = 0;
cin >> n;
for (ll i = 1; i * i <= n; i++)
if (n % i == 0) {
d.push_back( i);
if (n / i != i)
d.push_back(n / i);
}
ll count = 0;
for (auto a : d)
for (auto b : d)
for (auto c : d)
if (a * b * c == n)
count++;
cout << count << endl;
return 0;
}
结果:2430
编程题
读取时间n,
将n除以1000以去掉毫秒部分,然后取n除以86400的余数以得到最后一天的时间。然后将余数除以3600得到小时数,再将余数除以60得到分钟数,最后取余数得到秒数。
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
ll n;
cin>>n;
n/=1000;//去掉毫秒
n%=86400;//24*60*60就是一天的秒数86400 n%=86400就得到最后一天的秒数
int h=n/3600;//最后一天除以3600秒的带剩余的小时数
n%=3600;//小时的余数也就是分钟和秒,除以60得到分钟,余数是秒
int m=n/60;//最后的分钟数
int second=n%60; //最后的秒数
printf("%02d:%02d:%02d\n",h,m,second);
return 0;
}
3418. 杨辉三角形 - AcWing题库 N最大为:10的9次方,所以这道题不能暴力解。
这道题一定有解:
我们可以看出来杨辉三角是左右堆成的:
因为题目要求我们求第一次出现的数:
所以这个数一定是在左半部分,我们只看左半部分就行了:
我们斜着看,发现每个斜行都是呈递增状态:
组合数越靠近中间值越大,所以我们要找N要从内往外找:
我们发现 1<6<15<16,也就是越往内部这个数越有可能是N.
所以枚举的时候从第16行开始,枚举。