山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
判定2000—2500年中的每一年是否为闰年,并将结果输出。
本先分析闰年的条件:
(1)能被4整除,但不能被100整除的年份都是闰年,如1996年、2008年、2012年s2048年是闰年;
(2)能被400整除的年份是闰年,如1600年、2000年是闰年。
不符合这两个条件的年份不是闰年。例如2009年、2100年不是闰年。
设year为被检测的年份。算法可表示如下:
S1:2000→year
S2:若year不能被4整除,则输出year的值和“不是闰年”。然后转到S6,检查下一个年份
S3:若year能被4整除,不能被100整除,则输出year的值和“是闰年”。然后转到S6
S4 :若year能被400整除,输出year的值和“是闰年”,然后转到S6
S5:输出year的值和“不是闰年”
S6:year+1=year
S7:当year<=2500时,转S2继续执行,否则算法停止。
在这个算法中,采取了多次判断。先判断year能否被4整除,如不能,则year必然不是闰年。如year能被4整除,并不能马上决定它是否闰年,还要检查它能否被100整除。如不能被100整除,则肯定是闰年(例如2008年)。如能被100整除,还不能判断它是否闰年,还要检查它能否被400整除,如果能被400整除,则是闰年;否则不是闰年。
在这个算法中,每做一步,都分别分离出一些范围(已能判定为闰年或非闰年),逐步缩小范围,使被判断的范围愈来愈小,直至执行S5时,只可能是非闰年。
考虑算法时,应当仔细分析所需判断的条件,如何一整除,又能但不能被100步一步缩小检查判断的范围。对有的问题,判断的先后次整除被400整除序是无所谓的;而有的问题,判断条件的先后次序是不能闰年闰年任意颠倒的,读者可根据具体问题决定其逻辑。
给出一个大于或等于3的正整数,判断它是不是一个素数。
解题思路:所谓素数( prime ),是指除了1和该数本身之外,不能被其他任何整数整除的数。例如,13是素数,因为它不能被2,3,4,…,12整除。
判断一个数n ( n > 3 )是否为素数的方法是很简单的:将n作为被除数,将2 ~ ( n-1 )的计算各个整数先后作为除数,如果都不能被整除,则n为素数。
算法可以表示如下:
S1:输入n的值
S2 : i = 2 ( i作为除数)
S3 : n被i除,得余数r
S4:如果r = 0,表示n能被i整除,则输出n“不是素数”,算法结束;否则执行S5
S5 : i +1→i
S6:如果i<=n-1,返回S3;否则输出n的值以及“是素数”,然后结束
实际上,n不必被2 ~ ( n-1 )的整数除,只须被2 ~ n / 2的整数除即可,甚至只须被2 ~法n的整数除即可。例如,判断13是否为素数,只须将13被2和3除即可,如都除不尽,n必图为素数。
S6步骤可改为
S6:如果i<=√n,返回S3;否则算法结束