1.有序序列的判断
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。
#include <stdio.h> int main() { int n=0; scanf("%d",&n); int i=0; int arr[n]; for(i=0;i<n;i++) { scanf("%d",&arr[i]); } int f1=0; int f2=0; for(i=0;i<n-1;i++) { if(arr[i]>=arr[i+1]) { f1=1; } else if(arr[i]<arr[i+1]) { f2=1; } } if(f1+f2==1) { printf("sorted"); } if(f1+f2==2) { printf("unsorted"); } return 0; }
(1)判断一个数组是否有序,可以是升序,也可以是降序,比较复杂,这个方法巧妙地引入了变量f1
和f2,初始化为0;
(2)升序时,使用for循环两两比较,前者大于后者,则f1=1,前者小于后者,则f2=1;
如果升序,循环结束的时候,f1=0,f2=1,两者的和是1;
如果降序,循环结束的时候,f1=1,f2=0,两者的和是1;
这个时候,均是有序的序列;
否则,就会造成f1+f2和是2,就不是有序序列;
(3)如果序列里面的数字全部相同,就应该也是有序的,所以我们只需要在下面的这个判断条件
里面加相等的条件,加在if或者else if都是可以的,我选择加在if语句上面;
if(arr[i]>=arr[i+1])
{
f1=1;
}
else if(arr[i]<arr[i+1])
{
f2=1;
}