当前位置: 首页 > news >正文

【hustoj注意事项】函数返回值问题

原文

https://lg.h-fmc.cn/index.php/BC/27.html

问题回顾

此题目选自HFMC_OJ:4312: 简单递归操作
hustoj测试
此问题错误的代码是

#include<bits/stdc++.h>
using namespace std;
int a[10000];int n;
int b[10000]={0};
int pailie(int deep)
{int i; for(i=1;i<=n;i++){if (b[i]==0){a[deep]=i; b[i]=1;if(deep<n) pailie(deep+1);else{for(int j=1;j<=n;j++) cout<<a[j]<<" ";cout<<'\n';}b[i]=0;}}
}
int main()
{cin>>n;pailie(1);  return 0;
}

提交到hustoj的返回是
m5gsyipa.png
CCR Plus测试
代码同样:

#include<bits/stdc++.h>
using namespace std;
int a[10000];int n;
int b[10000]={0};
int pailie(int deep)
{int i; for(i=1;i<=n;i++){if (b[i]==0){a[deep]=i; b[i]=1;if(deep<n) pailie(deep+1);else{for(int j=1;j<=n;j++) cout<<a[j]<<" ";cout<<'\n';}b[i]=0;}}
}
int main()
{cin>>n;pailie(1);  return 0;
}

测评之后的返回是
m5gt0t8j.png
测试数据 testdata
点我下载:P4312_Testdata.zip

问题解析回顾

首先,可以得出要么是hustoj的问题,要么是ubuntu的问题,于是,我们使用宝塔Linux面板编译了代码,视频如下
https://lg.h-fmc.cn/usr/uploads/2025/01/3108223426.mp4
从上视频最后一帧可以看出,是第23行关于return有一定的关系。
23行是},于是,我们截取了整个子程序

int pailie(int deep)
{int i; for(i=1;i<=n;i++){if (b[i]==0){a[deep]=i; b[i]=1;if(deep<n) pailie(deep+1);else{for(int j=1;j<=n;j++) cout<<a[j]<<" ";cout<<'\n';}b[i]=0;}}
}

根据计算机程序设计基本尝试,我们可以知晓

子函数返回类型规则
int 整型
long long 长整型
char 字符型
string 字符型
double 双精度浮点型
float 单精度浮点型
void 无返回
注意看void,如果子函数的类型是void,则可以不需要return,但是上述代码的类型是int,也就是说,必须要返回一个整型,但是程序没有返回整型,所以出现了运行时错误

调整代码并重新测试

已知问题,那么我们就可以修复代码
修复方法1:修改类型int为void

#include<bits/stdc++.h>
using namespace std;
int a[10000];int n;
int b[10000]={0};
void pailie(int deep)
{int i; for(i=1;i<=n;i++){if (b[i]==0){a[deep]=i; b[i]=1;if(deep<n) pailie(deep+1);else{for(int j=1;j<=n;j++) cout<<a[j]<<" ";cout<<'\n';}b[i]=0;}}
}
int main()
{cin>>n;pailie(1);  return 0;
}

修复方法2:返回0

#include<bits/stdc++.h>
using namespace std;
int a[10000];int n;
int b[10000]={0};
int pailie(int deep)
{int i; for(i=1;i<=n;i++){if (b[i]==0){a[deep]=i; b[i]=1;if(deep<n) pailie(deep+1);else{for(int j=1;j<=n;j++) cout<<a[j]<<" ";cout<<'\n';}b[i]=0;}}return 0;
}
int main()
{cin>>n;pailie(1);  return 0;
}

提交代码
提交代码后,hustoj返回
m5gtqe3l.png
Linux重新编译
m5gtr261.png
已经编译成功,代码运行后正确

问题:为什么Windows下运行不会报错?

我们注意一下Linux的编译指令:-std=c++17
如果在Windows加上-std=c++17,那么一般会直接编译错误
因为Windows上的版本是C++11,如果是C++17,那么同样会报错

我们应该怎样做

1.严格遵守程序设计规则

http://www.lryc.cn/news/515464.html

相关文章:

  • 实现一个通用的树形结构构建工具
  • 数势科技:解锁数据分析 Agent 的智能密码(14/30)
  • 机器学习之过采样和下采样调整不均衡样本的逻辑回归模型
  • 解决 ssh connect to host github.com port 22 Connection timed out
  • mybatis/mybatis-plus中mysql报错
  • 在ros2 jazzy和gazebo harmonic下的建图导航(cartographer和navigation)实现(基本)
  • 《Rust权威指南》学习笔记(五)
  • GitHub的简单操作
  • 「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能
  • SMMU软件指南之系统架构考虑
  • 使用高云小蜜蜂GW1N-2实现MIPI到LVDS(DVP)转换案例分享
  • 「C++笔记」unordered_map:哈希化的无序映射函数(键值对)
  • Linux 安装jdk
  • asp.net core 发布到iis后,一直500.19,IIS设置没问题,安装了sdk,文件夹权限都有,还是报错
  • 【Go】运行自己的第一个Go程序
  • qt qss文件的使用
  • 【管道——二分+区间合并】
  • 宽带、光猫、路由器、WiFi、光纤之间的关系
  • 如何排查 Apache Doris 中 “Failed to commit txn“ 导入失败问题?
  • 回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测
  • HCIA-Access V2.5_7_3_XG(S)原理_关键技术
  • leetcode hot 100 不同路径
  • 智慧工地解决方案 1
  • LeetCode -Hot100 - 53. 最大子数组和
  • php 多进程那点事,用 swoole 如何解决呢 ?
  • 探索AI在地质科研绘图中的应用:ChatGPT与Midjourney绘图流程与效果对比
  • 【竞技宝】CS2:HLTV 2024 TOP11-w0nderful
  • Lua迭代器如何使用?
  • qt中如何判断字符串是否为数字,整数,浮点数?
  • Oracle sql developer and Toad for Oracle set start DBMS output