4.3w+
社区成员
#include <iostream>
using namespace std;
bool check(int x)
{
while(x)
{
int tmp = x % 10;
if(tmp == 2 || tmp == 4)
{
return false;
}
x /= 10;
}
return true;
}
int main()
{
int ans = 0;
// 正整数不包括 0
for(int i = 1; i < 2019; i++)
{
if(check(i))
{
for(int j = i + 1; j < 2019; j++)
{
if(check(j))
{
for(int k = j + 1; k < 2019; k++)
{
if(check(k) && i + j + k == 2019)
{
ans ++;
}
}
}
}
}
}
cout << ans << endl;
return 0;
}
#include <iostream>
using namespace std;
int year = 2012;
int month = 3;
int day = 12;
int main()
{
for(int i = 2012; ;i--)
{
int num = i * 10000 + 600;
for(int j = 1; j <= 30; j++)
{
int tmp = num;
tmp += j;
if(tmp % year == 0 && tmp % month == 0 && tmp % day == 0)
{
cout << tmp << endl;
return 0;
}
}
}
return 0;
}
#include <iostream>
using namespace std;
int n;
int main()
{
cin >> n;
int tmp = n;
int num1 = 0, num2 = 0;
while(tmp --)
{
int x;
cin >> x;
if(x >= 60)
{
num1 ++;
if(x >= 85)
{
num2 ++;
}
}
}
cout << (int)((num1 * 100.0 / n) + 0.5) << "%" << endl;
cout << (int)((num2 * 100.0 / n) + 0.5) << "%" << endl;
return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
// 思路:线性DP
// f(i)
// 表示: 达到 i点时 能达到最大的分值
// 属性: 达到 i点时 能达到最大的分值
// 状态转移方程: f[j] = max(f[j] ,f[i] + v[i]) 即 表示 从上一次得落脚点 到 可以一次性到达的点中,选取可获价值最高的落脚点
const int N = 1e4 + 10, INF = 0x3f3f3f;
int n;
int v[N];
int f[N];
int getMinPrimes(int x)
{
if(x == 1) return 1;
for(int i = 2; i <= x / i; i++)
{
if(x % i == 0)
{
return i;
}
}
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> v[i];
}
// 全部填充最小值,因为题目中的得分可以是负数,防止负数得分下不走的情况
// 【即防止因为价值已经是负数 而导致 max一直为0】
memset(f, -INF, sizeof(f));
f[1] = v[1];
for(int i = 1; i <= n; i++)
{
int end = min(n, i + getMinPrimes(n - i)); //如果 i + 最小质因子 > n,表示当前可以走完剩下整个数组
for(int j = i + 1; j <= end; j++)
{
//即 表示 从上一次得落脚点 到 可以一次性到达的点中,选取可获价值最高的落脚点
f[j] = max(f[j], f[i] + v[j]);
}
}
cout << f[n] << endl;
return 0;
}