蓝桥杯练习系统出现运行错误是啥原因
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯练习系统出现运行错误是啥原因相关的知识,希望对你有一定的参考价值。
我也出现了运行错误,但是找到了解决方案,是数组越界:请看你的运行错误是否根源和我一样:
根据给出的测试用例,在自己的机器上能够正确运行,提交上去以后就出现了运行错误。测试平台还有很多测试数据我们看不到,当出现一个测试数据,在产生的结果超出我们没有考虑充分的情况下,就可能出现运行错误。如下代码,是 蓝桥杯:基础练习 特殊回文数 的正确代码(java),当我第一次提交时出现了运行错误,后来检查是数组设置小了,导致数组越界。代码中注释说明的部分。
import java.util.Scanner;
import java.util.Arrays;
public class Main
public static void main(String[] args)
// TODO Auto-generated method stub
Scanner stdin = new Scanner(System.in);
int num=stdin.nextInt();
//int[] result=new int[10]; =======》!运行错误的地方
int[] result=new int[10000];
Arrays.fill(result, -1);
int index=0;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
for(int k=0;k<10;k++)
//处理6位数
if((i+k+j)*2==num && i!=0)
int tmp = i*100000+j*10000+k*1000+k*100+j*10+i;
if(tmp>10000) //确保是5或6位数
result[index] = tmp;
index++;
//处理5位数
if(((i+j)*2+k)==num)
int tmp = i*10000+j*1000+k*100+j*10+i;
if(tmp>10000)
result[index] = tmp;
index++;
Arrays.sort(result);
for(int i=0;i<result.length;i++)
if(result[i]==-1 )
continue;
System.out.println(result[i]);
当我再遇到:此类问题在过来补充。先去刷题了。
参考技术A 1、无效的属性值(错误 380),属于可捕获的错误。2、大多数属性只接受一定类型和一定范围的值。3、造成此错误的原因和解决方法:赋给属性的值不正确,参看属性的帮助,以决定属性的类型和取值范围。蓝桥杯练习系统历届试题 横向打印二叉树
二叉树可以用于排序。其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。
当遇到空子树时,则把该节点放入那个位置。
比如,10 8 5 7 12 4 的输入顺序,应该建成二叉树如下图所示,其中.表示空白。
10-|
...|-8-|
.......|...|-7
.......|-5-|
...........|-4
本题目要求:根据已知的数字,建立排序二叉树,并在标准输出中横向打印该二叉树。
输入数据为一行空格分开的N个整数。 N<100,每个数字不超过10000。
输入数据中没有重复的数字。
输出该排序二叉树的横向表示。为了便于评卷程序比对空格的数目,请把空格用句点代替:
10-|
...|-5
..|-10-|
..|....|-8-|
..|........|-7
5-|
..|-4
首先就是题意,把图片顺时针旋转90°..
然后,建立排序二叉树没有问题,
输出...
1.中序遍历递归出每个节点所在行的字符串保存起来,过程中记录当前节点在str中的层数tier和当前节点需要扩展的|位置.
2.递归每个节点到它的左右子树所在层+|.
非常好的关于二叉树的题目.......还真是喜欢这个递归呢.........T_T
附代码:
/* 蓝桥杯横向打印二叉树 首先就是题意,把图片顺时针旋转90°.. 然后,建立排序二叉树没有问题, 输出... 1.中序遍历递归出每个节点所在行的字符串保存起来,过程中记录当前节点在str中的层数tier和当前节点需要扩展的|位置. 2.递归每个节点到它的左右子树所在层+|. */ #include <stdio.h> #include <algorithm> #include <iostream> using namespace std; char str[210][30000]; int cnt = 0; int cntStr = 0; struct Node { int val; // 当前节点的值 int lson, rson; // 左右孩子节点的编号 int num; // 当前节点在数组中的编号 int tier; // 表示当前节点在str中是第tier个 int ls; // 当前节点应该扩展的|位置 Node() { num = -1; lson = -1; rson = -1; tier = -1; ls = -1; } }tree[210]; void add(int rt, int val, int num) { // 参数:根节点 加入的值 加入值的序号 if (tree[rt].val < val) { // 交给右子树 if (tree[rt].rson == -1) { tree[rt].rson = num; tree[num].val = val; tree[num].num = num; } else add(tree[rt].rson, val, num); } else { if (tree[rt].lson == -1) { tree[rt].lson = num; tree[num].val = val; tree[num].num = num; } else add(tree[rt].lson, val, num); } } void midSearch(int rt) { // 中序遍历 if (tree[rt].rson != -1) { midSearch(tree[rt].rson); } printf("%d\n", tree[rt].val); if (tree[rt].lson != -1) midSearch(tree[rt].lson); } int getlen(int num) { int cnt = 0; while(num) { num /= 10; cnt++; } return cnt; } void printToStr(int rt, int len) { // 每个节点所在的字符串输出到字符串str里 len表示遍历到当前数字的时候 前面已经确定的长度 if (tree[rt].rson != -1) { printToStr(tree[rt].rson, len + getlen(tree[rt].val) - 1 + (rt == 0 ? 2 : 4)); } for (int i=0; i<len; ++i) str[cntStr][i] = ‘.‘; sprintf(str[cntStr]+len, "%s%d%s", rt == 0 ? "\0" : "|-", tree[rt].val, ((tree[rt].lson == -1 && tree[rt].rson == -1) ? "\n" : "-|\n")); tree[rt].tier = cntStr; if (tree[rt].lson != -1 || tree[rt].rson != -1) tree[rt].ls = len + (rt == 0 ? 0 : 2) + getlen(tree[rt].val) + 1; //cout << tree[rt].ls << "*\n"; cntStr++; if (tree[rt].lson != -1) { printToStr(tree[rt].lson, len + getlen(tree[rt].val) - 1 + (rt == 0 ? 2 : 4)); } } void format(int rt) { // 将字符串里的|加上 len表示当前节点的|位置 if (tree[rt].rson != -1) { format(tree[rt].rson); for (int i=tree[tree[rt].rson].tier; i<=tree[rt].tier; ++i) { str[i][tree[rt].ls] = ‘|‘; } } if (tree[rt].lson != -1) { format(tree[rt].lson); for (int i=tree[rt].tier; i<=tree[tree[rt].lson].tier; ++i) { str[i][tree[rt].ls] = ‘|‘; } } } int main() { // freopen("1.in.cpp", "r", stdin); int n; scanf("%d", &n); tree[0].val = n; // 根节点为0 tree[0].num = 0; while(~scanf("%d", &n)) { add(0, n, ++cnt); // 在二叉树上加入n } printToStr(0, 0); // 每个节点对应的字符串加入到str中 format(0); for (int i=0; i<cntStr; ++i) { printf("%s", str[i]); } return 0; }
以上是关于蓝桥杯练习系统出现运行错误是啥原因的主要内容,如果未能解决你的问题,请参考以下文章