題目分析:
該題是對給定輸入的一組數進行分組,與就是比較當前相鄰兩個數是否相同,如果相同則算在一組數中,如果不相同則把它分在兩個數列中,並且增加統計數列分組值增加1.關鍵就在於比較當前數與下一個數是否相同,可是使用數組把全部數輸入到數組中在利用數組位序增加的操作比較(關於對數組位序的討論,查看我的另一篇博客:https://blog.csdn.net/AIMINdeCSDN/article/details/103347659),但是我使用的時直接設置一個標誌數,即首先讀入一個數,然後再讀入一個數比較,如果相同,接着讀,如果不相同,則替換該標誌值,並且繼續向下讀。這樣算法時間與空間性能都更高。
C語言源程序:
#include<stdio.h>
int main()
{
int n,i,j,k;
int num=0;
scanf("%d",&n);
//首先讀入一個數,作爲標誌值
scanf("%d",&j);
for(i=1;i<n;i++)
{
scanf("%d",&k);
//如果該值與下一個值不相等,則統計組數加1
if(j!=k)
{
j=k;
num++;
}
}
//最後將尾部的數單獨加1
num++;
printf("%d",num);
return 0;
}