我正在研究以下问题:
编写一个名为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我看不出我哪里错了!任何帮助都将不胜感激。谢谢
发布于 2015-08-11 19:17:17
你在你的代码中遗漏了几个案例。一个可能的例子是,如果person 1出生于20/07/2010,person 2出生于23/05/2011。这里,人员1的days和years都大于人员2的,但月份小于。你的代码会说他们同龄,但事实并非如此,person 1比你大。
解决这个问题的最简单方法是首先检查年份。如果它们不同,我们可以返回。如果年份相同,那么我们需要检查月份,如果它们不同,我们可以返回,但如果它们不同,我们必须对日期执行相同的检查。
也值得注意的是,如果person 1的年份大于person 2的年份,则person 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发布于 2015-08-11 23:01:56
正如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发布于 2015-08-11 19:18:51
您可能在if语句的底部缺少另一个end,
https://stackoverflow.com/questions/31940123
复制相似问题