蒜头君的减肥计划(贪心)

https://www.jisuanke.com/problem/T3855
我代码:


#include<bits/stdc++.h>
using namespace std;
int main()
{
    long int n,a[100001]={0},b[100001]={0},c[100001],o=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i]>>b[i];
    }
    for(int i=0;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            c[i]+=a[j];
        }
        if(i>0)
        {
            for(int j=0;j<=i;j++)
            c[i]+=b[j];
        }
    }
    for(int i=0;i<=n-1;i++)
    o+=c[i]^c[i+1];
    cout<<o;
} 

麻烦看下,谢谢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    根据参考资料中的代码,问题出现在第13行的代码中,两次使用了scanf函数来获取输入,但是第二次使用scanf函数时,没有传入正确的参数。在这里,由于c是一个字符,必须使用%c来接收输入的字符,所以需要把第13行的代码修改为scanf("%c", &c);。此外,我还注意到第24行的空格缩进不正确,需要修复。

    修改后的代码如下:

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
        int sum, a, b;
        char c;
        while (scanf("%d", &a) != EOF)
        {
            sum = a;
            while (scanf(" %c", &c) != EOF) // 修改了这一行的代码
            {
                scanf("%d", &b);
                if (c == '+')
                    sum = sum + b;
                else if (c == '-')
                    sum = sum - b;
                else if (c == '*')
                    sum = sum * b;
                else if (c == '/')
                    sum = sum / b;
                else if (c == '=')
                    break;
            }
            printf("%d\n", sum);
        }
        return 0;
    }
    

    请注意第13行的代码中的空格,它是为了跳过之前输入的换行符。这是因为在之前的输入中,按下回车键后会留下一个换行符,而字符输入%c会读取该换行符。通过在%c前面添加一个空格,可以确保scanf读取到正确的字符。

    希望这个修改能解决你的问题。如果还有其他问题,请随时向我提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

c[i]+=a[j];
c数组没有初始化为0 啊
c[100001] = {0};