接下来的三个代码之间有什么区别。
1:
Ex:
Class POJO{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
------
@GeneratedValue(strategy = GenerationType.IDENTITY)
-----
@GeneratedValue(strategy = GenerationType.TABLE)
------
(or Any other best approch?)
}
错误答案
2:
struct node
{
int data;
}tree[100050];
/*
some codes
*/
int main()
{
int tot;
scanf("%d",&tot);
int tmp;
for(int i=0;i<=tot;++i){
scanf("%d",&tmp);
tree[i].data=tmp;
insert(i,1);
}
}
接受
3:
struct node
{
int data;
}tree[100050];
/*
some codes
*/
int main(){
int n;
scanf("%d",&n);
int tmp;
for(int i=0;i<=n;++i){
scanf("%d",&tree[i].data);
insert(i,1);
}
}
接受
第一个代码无法通过所有测试,但接下来的两个代码可以通过所有测试。
问题在于POJS024。它是用中文写的。 输入是构建二进制排序树的数字列表,第一个数字是根。 输出有序遍历和后序遍历。
答案 0 :(得分:5)
这三个人都使用错误的逻辑。你在第二个和第三个中很幸运,可能是因为insert
对值等于0进行了一些特殊处理。
这三个中的错误是你正在使用
for(int i=0;i<=n;++i){
而不是
for(int i=0;i<n;++i){
^^^ Needs to be < not <=
如果您有代码来检查scanf
的返回值,那么您很快就会发现错误。
if ( scanf(...) == 1 )
{
insert(i,1);
}
这就是为什么养成检查scanf
函数族的返回值的习惯,这一点非常重要,以确保您能够读取您期望的所有数据。
答案 1 :(得分:2)
问题(在所有三种情况下实际上都存在)是因为您在{{1}中使用了scanf()
比较,因此您拨打<=
的次数太多了}循环而不是使用for
比较。结果,对<
的最后一次调用实际上失败了。然后再打电话给scanf()
一次。
在示例1中,insert(i,1)
被设置为读入tree[i].data
的最后一个值,在示例2和3中,值保留为零。显然,对tmp
的额外调用在该特定情况下不会导致问题。