我正在处理以下问题:
编写一个名为older的函数,它将六个正标量整数作为其输入参数:y1,m1,d1,y2,m2,d2,依次表示两个人的生日。以y开头的变量代表年份,m代表月份,d代表当天。以1结尾的变量对应于第一人,而以2结尾的变量对应于第二人。如果第一个人年龄较大,则函数返回1;如果年龄相同,则返回0;如果第一个人年龄较小,则返回-1。您无需检查输入是否具有适当的值。例如,您可以假设m1和m2都是小于13的正整数,并且天数与它们的月份相符。
function x = older( y1,m1,d1,y2,m2,d2 )
if d1 > d2 && m1 > m2 && y1 > y2
x = 1;
elseif d1 < d2 && m1 < m2 && y1 < y2
x = -1;
else
x = 0;
end
我无法看到我哪里出错了!任何帮助将不胜感激。 感谢
答案 0 :(得分:1)
您的代码已经错过了几个案例。一个可能的例子是,如果第1人出生在 20/07/2010 ,而第2人出生于 23/05/2011 。在这里,第1人的天和年 更强比人2 月 较少。你的代码会说他们年龄相同,但他们不是,第1人年纪大了。
最简单的方法是先查看年份。如果他们不同,我们可以返回。如果年份相同,那么我们需要检查月份,如果它们不同我们可以退货,但如果他们不这样做,我们必须对这些日子进行相同的检查。
值得注意的是,如果 person 1的年份大于 person 2 的年份,则为人2岁以上。你已经在你的解决方案中混淆了这一点(我在第一次尝试时也这样做了。)
function x = older(y1, m1, d1, y2, m2, d2)
if (y1 == y2)
if (m1 == m2)
if (d1 == d2)
x = 0;
elseif (d1 > d2)
x = -1;
else
x = 1;
end
elseif (m1 > m2)
x = -1;
else
x = 1;
end
elseif (y1 > y2)
x = -1;
else
x = 1;
end
end
答案 1 :(得分:0)
正如Kavanai4所述,有几个案例你已经错过了。根据他们的解决方案,您可以直接考虑所有这些问题,或者您可以尝试重新设计问题以减少if-else情况。有些人发现这使逻辑变得不那么棘手。
这是解决问题的另一种方法。您可能必须将uint8转换为double以保持在范围内,否则这应该有效。它会将if-else案件保持在最低限度。
function x = older(y1, m1, d1, y2, m2, d2)
tmp1 = y1*10000+m1*100+d1;
tmp2 = y2*10000+m2*100+d2;
if tmp1>tmp2
x=-1;
elseif tmp1<tmp2
x=1;
else
x=0;
end
答案 2 :(得分:-2)
您可能在end
语句的底部缺少另一个if
,