💥前言
刷刷刷
😉解题报告
💥奇数倍数
☘️ 题目描述☘️
🤔一、思路:
(1)直接取2019的倍数并判断是否为当前倍数的每位是否为奇数
😎二、代码:
#include <iostream>
using namespace std;
int main()
{
int num = 2019;
for (int i = 0;;i++) {
num += 2019;
int t = num;
int flag = 1;
while (t > 0) {
int digit = t % 10 % 2;
if (digit == 0) {
flag = 0;
break;
}
t /= 10;
}
if (flag == 1) {
cout << num;
break;
}
}
return 0;
}
💥求值
☘️ 题目描述☘️
🤔一、思路:
(1)用约数个数定理求
😎二、代码:
#include <iostream>
using namespace std;
int main()
{
// 约数个数定理:n = 2^? * 3^? * 5^? * 7^?, 约数个数等于(?+1)*(?+1)*(?+1)*(?+1)
int a = 2*2*2*2;
int b = 3*3*3*3;
int c = 5;
int d = 7;
printf("%d",a*b*c*d);
return 0;
}
💥求和
☘️ 题目描述☘️
🤔一、思路:
(1) s u m = a 1 ∗ ( a 2 + a 3 … … + a n ) + a 2 ∗ ( a 3 + a 4 … … + a n ) + … … + a n − 1 ∗ a n sum = a_1*(a_2+a_3……+a_n)+a_2*(a_3+a_4……+a_n)+……+a_n-_1 * a_n sum=a1∗(a2+a3……+an)+a2∗(a3+a4……+an)+……+an−1∗an,所以,可以先在输入时同时将输入值全部相加获得总值,之后依次从总值减去当前值,与当前值相乘并累加最后进行输出;
😎二、代码:
#include <iostream>
using namespace std;
int num[210000];
typedef long long ll;
int main()
{
int n;
ll sum = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d",&num[i]);
sum += num[i];
}
ll ret = 0;
for (int i = 1; i <= n; i++) {
sum -= num[i];
ret += num[i] * sum;
}
printf("%lld",ret);
return 0;
}
💥数位排序
☘️ 题目描述☘️
🤔一、思路:
(1)创建一个数组进行存储 n n n个自然数,对其进行位数和的大小的排序,若相等则按位数即大小进行排序;
😎二、代码:
#include <bits/stdc++.h>
using namespace std;
int num[1100000];
int digit(int x) {
int ret = 0;
while (x) {
ret += x % 10;
x /= 10;
}
return ret;
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) num[i] = i;
sort (num + 1, num + 1 + n, [&](const int a, const int b) {
int aa = digit(a), bb = digit(b);
if (aa != bb) return aa < bb;
return a < b;
});
printf("%d ", num[m]);
return 0;
}