目录
1.游游的7的倍数
2.游游的字母串
3.游游的水果大礼包
4.游游的矩阵权值
游游拿到了一个正整数 x,她希望在 x 中添加一个数字,使它成为 7 的倍数。你能帮帮她吗?
一个正整数 x。 1≤x≤10^9
x添加一个数字后形成的数。请务必保证操作的合法性,且一定是7的倍数。如果有多解,输出任意一个合法解。可以证明,至少存在一个正确答案。
示例1
1
21
在前面添加一个2即可。
示例2
15
105
在1和2的中间添加一个0。105=15*7,合法。另外,315、154等答案也是合法的。
用l和r代表数字的左部分和右部分,base代表位数,枚举每一种插入情况,直到找到结果,程序结束
#include
#include
using namespace std;
typedef long long ll;
ll x;
ll l, r;//数字的左部分和右部分
ll base = 1;//位数
ll res;
int main()
{
cin >> x;
l = x, r = 0;
while (l) {
for (int i = 0; i <= 9; i++) {
res = l * base * 10 + i * base + r;
if (res % 7 == 0) {
cout << res << endl;
return 0;
}
}
l /= 10;
r += (l % 10) * base;
base *= 10;
}
return 0;
}
对于一个小写字母而言,游游可以通过一次操作把这个字母变成相邻的字母。'a'和'b'相邻,'b'和'c'相邻,以此类推。特殊的,'a'和'z'也是相邻的。可以认为,小写字母的相邻规则为一个环。
游游拿到了一个仅包含小写字母的字符串,她想知道,使得所有字母都相等至少要多少次操作?
一个仅包含小写字母,长度不超过100000的字符串。
一个整数,代表最小的操作次数。
示例1
yab
3
第一次操作,把'y'变成'z',字符串变成了"zab"
第二次操作,把'b'变成'a',字符串变成了"zaa"
第三次操作,把'z'变成'a',字符串变成了"aaa"
枚举每一种情况(把每一个字符变为'a'~'z')找出最小的答案
#include
#include
#include
using namespace std;
typedef long long ll;
string s;
ll ans = 0x3f3f3f3f;
ll a;
int main()
{
cin >> s;
ll len = s.length();
for (char i = 'a'; i <= 'z';i++) {
a = 0;
for (int j = 0; j < len; j++) {
a += min(abs(s[j] - i), 26 - abs(s[j] - i));
}
ans = min(ans, a);
}
cout << ans << endl;
return 0;
}
游游有n个苹果,m个桃子。她可以把2个苹果和1个桃子组成价值a元的一号水果大礼包,也可以把1个苹果和2个桃子组成价值b元的二号水果大礼包。游游想知道,自己最多能组成多少价值总和的大礼包?
四个正整数n,m,a,b,用空格隔开。分别代表苹果的数量、桃子的数量、一号大礼包价值、二号大礼包价值。 1≤n,m,a,b≤10^6
一个整数,代表大礼包的最大价值总和。
示例1
3 4 1 2
4
组成两个二号水果大礼包,使用了2个苹果和4个桃子。总价值为4。
示例2
1 1 5 6
0
显然无法组合成任意一个大礼包
枚举第一种礼包的数量(在符合题意的情况下),计算出除了用于礼包一剩下的苹果和桃子,计算可以打包成的礼包二的数量,最后更新答案
#include
#include
using namespace std;
typedef long long ll;
ll n, m, a, b, ans;
int main()
{
cin >> n >> m >> a >> b;
for (int i = 0; 2 * i <= n && i <= m; i++) {//i表示组合一的数量
ll s1 = n - i * 2;//剩下的苹果
ll s2 = m - i;//剩下的桃子
ll j = min(s1, s2 / 2);
ll sum = i * a + j * b;
ans = max(ans, sum);
}
cout << ans << endl;
return 0;
}
游游定义一个矩阵权值为:每一对相邻元素之和的总和。
例如,对于矩阵:
1 2
3 4
它的权值是(1+2)+(1+3)+(2+4)+(3+4)=3+4+6+7=20。
游游希望你构造一个n∗n的矩阵,矩阵中的元素为1到n^2且每个数恰好出现一次。她希望最终矩阵的权值尽可能大。你能帮帮她吗?由于矩阵可能过大,你不需要输出最终的矩阵,只需要输出这个最大权值即可。答案对10^9+7取模。
一个正整数n。 2≤n≤10^9
矩阵的最大权值,对10^9+7取模。
示例1
2
20
示例2
3
134
四个顶角的数字出现2次
四边抛去顶角的数字出现3次
中间的数字出现4次
利用等差数列求和公式可以求出答案,记得取模
#include
#include
using namespace std;
typedef long long ll;
ll n;
const int mod = 1e9 + 7;
int main()
{
cin >> n;
ll s1 = 20;
ll s2 = 3 * ((4 * n - 8)%mod) * ((4 * n + 1) % mod) / 2 % mod;
ll s3 = 2 * ((n * n - 4 * n + 4)%mod) * ((n * n + 4 * n - 3) % mod) % mod;
ll s;
if (n >= 3) {
s = (s1 + s2 + s3) % mod;
}
else {
s = s1;
}
cout << s << endl;
return 0;
}