A:我爱编程,编程使我快乐。
签到,直接输出就行
#include <stdio.h>
 
int main()
{
    printf("我爱编程,编程使我快乐。");
}
B: 我要看奥运!!!
注意时间跨天以及scanf和printf的使用
#include <bits/stdc++.h>
using namespace std;
signed main()
{
	int hh,mm;
    scanf("%d:%d",&hh,&mm);
    hh = hh + 18;
    hh %= 24;
    printf("%02d:%02d",hh,mm);
}
C: 二进制翻转
根据题意只需要计算数组中连续的0的段数即是答案,注意到每个连续的0的段前面必定有一个1(如果起始为0单独计算),所以记录前1后0的位置的数量即是连续的0的段的数量。
#include <stdio.h>
int n;
int a[200005];
int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    int ans = 0;
    if (a[0] == 0) ans++;
    for (int i = 1; i < n; i++) {
        if (a[i] == 0 && a[i - 1] == 1) ans++;
    }
    printf("%d\n", ans);
    return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n;
int a[200005];
int main() {
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    int ans = 0;
    if (a[0] == 0) ans++;
    for (int i = 1; i < n; i++) {
        if (a[i] == 0 && a[i - 1] == 1) ans++;
    }
    cout << ans << endl;
    return 0;
}
D: 小明的数字
先用char数组读入字符串s,再遍历判断s中的每一个字符,从第一个字符开始,当第i个字符比m小时,将m插入到第i个字符前面,就可以保证最后得到的值是最大值。
#include <stdio.h>
char s[105];
int main()
{
    int n;
    char m;
    scanf("%d", &n);
    scanf("%s %c", s, &m);
    int f = 0;
    for (int i = 0; i < n; i++)
    {
        if (m > s[i] && f == 0)
        {
            printf("%c", m);
            f = 1;
        }
        printf("%c", s[i]);
    }
    if (f == 0)
        printf("%c", m);
    return 0;
}
E:小明的打怪游戏
由于先攻击血量高的怪物,所以在读取时可以先对血量ai大于k的值对k取模。取模后这个题就变成了一个排序问题,将血量高的排在前面,因为优先攻击血量高的怪物,血量相同时,按找下标排序,将下表较小的放在前面。就可以得到怪物死亡顺序了。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct xp
{
    int i, k;
} a[N];
bool cmp(xp a, xp b)
{
    if (a.k != b.k)
    {
        return a.k > b.k;
    }
    return a.i < b.i;
}
int main()
{
    int n, k;
    cin >> n >> k;
    for (int i = 1; i <= n; i++)
    {
        a[i].i = i;
        cin >> a[i].k;
        if (a[i].k % k == 0)
            a[i].k = k;
        else
            a[i].k %= k;
    }
    sort(a + 1, a + n + 1, cmp);
    for (int i = 1; i <= n; i++)
    {
        cout << a[i].i << ' ';
    }
    return 0;
}
F: 寝室的宝箱(简单版)
简单的加减计算,对于输入的数字和字符调用相关的式子即可
#include<stdio.h>
int main()
{
    int x,y;
    char ch;
    scanf("%d %c %d",&x,&ch,&y);
    printf("%d",(ch=='+'?x+y:x-y));
    return 0;
}
G: 寝室的宝箱(困难版)
如果选择整形进行计算需要考虑使用longlong,对于除法需要特判一下,另外使用浮点数进行计算由于没有卡精度所以也是可以过的。
#include<stdio.h>
int main()
{
    long long x,y;
    char ch;
    scanf("%lld %c %lld",&x,&ch,&y);
    if(ch=='/') 
    {
        if(x%y)printf("%.2lf",(double)x/y);
        else printf("%lld",x/y);
    }
    else printf("%lld",ch=='+'?x+y:(ch=='-'?x-y:x*y));
    
    return 0;
}
H:小明的午餐难题
找到a,b,c,d中的最小值,并将其输出。
#include <stdio.h>
int main()
{
    int a, b, c, d;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    int minnum = a;
    if (minnum > a)
        minnum = a;
    if (minnum > b)
        minnum = b;
    if (minnum > c)
        minnum = c;
    if (minnum > d)
        minnum = d;
    printf("%d", minnum);
    return 0;
}
I:历经千辛万苦,只为得到你
签到题,直接输出即可。
#include<stdio.h>
int main()
{
    printf("AC!!!\n");
    return 0;
}
J: 元素中和之力
观察发现草或风只有一种中和反应方法,所以从草或风开始依次计算即可 反应时取反应元素中较小的元素值
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve()
{
    ll x[8] = {0};
    int t;
    cin >> t;
    while (t--)
    {
        for (int i = 1; i <= 7; ++i)
        {
            cin >> x[i];
        }
        ll ans = 0;
        swap(x[4], x[7]); // 交换
        for (int i = 7; i >= 1; --i)
        {
            ll mi = min(x[i], x[i - 1]);
            if (mi > 0)
            {
                ans += mi;
                x[i - 1] -= mi;
            }
        }
        cout << ans  << "\n";
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int test = 1;
    // cin >> test;
    while (test--)
    {
        solve();
    }
    return 0;
}

 京公网安备 11010502036488号
京公网安备 11010502036488号