一支彩色铅笔 2022-05-03 16:57 采纳率: 100%
浏览 461
已结题

为啥洛谷编译不通过 明明我Devc++ 和visual studio 都通过了

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

#include
using namespace std;
#include<math.h>
typedef long long int llt;
llt arr[63000];
llt index = 0;//索引数组的下标
int num1 = 0, num2 = 0;
int f = 0;
llt sum = 0;
//sum用来记录输入了多少个有效字母 ,f来判断是否发生特殊情况
void cal(int number)
{
num1 = 0; num2 = 0;
while (num1 < number && num2 < number)
{

    if (index == sum)
        break;
    if (arr[index] == 'W')
    {
        num1++; index++;
    }
    else if (arr[index] == 'L')
    {
        num2++; index++;
    }
}



if (abs(num1 - num2) >= 2)
    cout << num1 << ":" << num2 << endl;
else
{
    f = 1;

    while (!(abs(num1 - num2) >= 2))
    {
        if (index == sum)
            break;
        if (arr[index] == 'W')
        {
            num1++; index++;
        }
        else if (arr[index] == 'L')
        {
            num2++; index++;
        }
    }
}

if (f)
    cout << num1 << ":" << num2 << endl;
if (index != sum)cal(number);

}

int main()
{

char a;
for (llt i = 0; cin >> a && a != 'E'; i++)
{
    arr[i] = a; sum++;
}
cal(11);
cout << endl;
index = 0, f = 0;
cal(21);
return 0;

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

3条回答 默认 最新

  • 关注

    变量 f 的值在cal函数开始的时候需要重置为0吧,否则上一次cal运行的时候,如果 f 的值是1,会影响下一次cal函数的执行。
    修改如下:

    void cal(int number)
    {
        f = 0; //修改  在这里把f重置为0
        //其它代码。。。
        num1 = 0; num2 = 0;
        //...
    }
    
    

    还有就是,你的arr数组中,存储的元素的实际大小是-128到127(char的数据范围),没必要用long long 类型,白白的浪费内存空间。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月11日
  • 已采纳回答 5月3日
  • 创建了问题 5月3日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料