A — 波吉大冒险
若一个数为偶数 那么这个数的最后一个数必定为偶数。 从这里下手的话,可以得知
只要给出的数最后一个数为偶数,答案为 0 第一个数为偶数,只要翻转整个数 就可以得到偶数,答案为 1
若不满足以上两个条件,那么如果整个数字中若有偶数,那么只要翻转这个偶数,将这个偶数变到第一个位置上去,再翻转整个数,即可得到偶数,答案为 2(先要判断这个数中是否含有偶数)
核心代码为
string str;
cin >> str;
int len = str.size() - 1;
if((str[len] - '0') % 2 == 0){
printf("0\n");
return;
}
if((str[0] - '0') % 2 == 0){
printf("1\n");
return;
}
int p = 0;
for (int i = 0; i < len; i ++ ){
if((str[i] - '0') % 2 == 0){
printf("2\n");
return;
}
}
printf("-1\n");
B — 波吉的聚会
首先,组成的队伍里面要有两个国家的其中一个人之一,所以答案最多为 n, m 里面最少的一个 其次,组成的队伍最多只能由 (n + m) / 4支 所以答案就取两种情况的最小值 min((n + m)) / 4,min(n, m))
C — 波吉买花花
首先,先将给定的数组排序(肯定从小价钱的花开始买,买的花才最多), 那么只要
a[i] >= x && a[i] <= y
m - a[i] >= 0
那么这束花就是可以买的
所以核心代码为
int n, x, y, m;
scanf("%d%d%d%d", &n, &,x, &y, &m);
for (int i = 1; i <= n; i ++ ) cin >> a[i];
sort(a + 1, a + 1 + n);
int ans = 0;
for (int i = 1; i <= n; i ++ ){
if(a[i] < x || a[i] > y) continue;
if(m - a[i] < 0) break;
m -= a[i];
ans ++;
}
printf("%d\n", ans);
D — 波吉不是笨蛋
水题,用个强制转换就可以
char n;
cin >> n;
cout << (int)n << endl;
E && F
首先想到的是统计每个数的出现次数,用一个数组存就行,用这个思路可以过F,但是因为E题的数据范围开到了1e9, 那么是开不到这么大的数组的(内存不够) 所以就要换个思路。
我们可以将这个数组排序(更方便的统计出现次数),依次统计每个数的出现次数 例如我要统计排序后的数组 1 1 2 2 3 3 4 5 5 令con为统计次数,若a[i] != a[i - 1] 那么con重新定义为1 那么循环的过程con的值为 1 2 1 2 1 2 1 1 2 当i = 8的时候 要改变con的值 发现上一个con的值是奇数 就输出上一个数 所以我们每次再将con重新定义为1的时候 去查询上一个数字的出现次数是否为奇数,如果为奇数就输出 所以核心代码为
sort (a + 1, a + 1 + n);
int con = 1;
for (int i = 2; i <= n; i ++ ){
if(a[i] == a[i - 1]) con ++;
else{
if(con % 2 != 0){
cout << a[i - 1] << endl;
return 0;
}
con = 1;
}
}
cout << a[n] << endl;
G — 波吉的迷语
首先如果这个字符串不全是 0 或 1 那么就要对这个字符串进行拆分,拆到只剩 0 或者 1 为止 如果这个区间不全是0或者1,我们可以用递归去拆分区间,每次以中间为节点进行拆分
void solve(int l, int r) l, r 分别表示左端点和右端点
int mid = (l + r) / 2;
solve(l ,mid);
solve(mid + 1, r);
每次进入函数之前 都判断一下是否全为0或者1
int p = 0;
for (int i = l + 1; i <= r; i ++ ){
if(s[i] != s[i - 1]){
p = 1;
break;
}
}
if(p == 0){
if(s[l] == '0') printf("A");
else printf("B");
return;
}
所以完整核心代码为
void solve(int l, int r)
{
int p = 0;
for (int i = l + 1; i <= r; i ++ ){
if(s[i] != s[i - 1]){
p = 1;
break;
}
}
if(p == 0){
if(s[l] == '0') printf("A");
else printf("B");
return;
}
printf("C");
int mid = l + r >> 1;
solve(l, mid);
solve(mid+ 1, r);
return;
}
H — 诅咒之气
没啥好说的,直接上代码吧
long long ans = 1, n, x;
scanf("%lld%lld", &n, &x);
for (int i = 1; i <= n; i ++ )
{
ans = ans + x * ans;
}
printf("%lld", ans);
|