1. 程式人生 > >給一串數字,判斷是否連續

給一串數字,判斷是否連續

題在標題,思路在程式碼

#include<stdio.h>

int main()
{
	int arr[] = { 8 , 3, 2, 6, 4, 5, 3, 7 };	//一組任意數字
	int sz = sizeof(arr) / sizeof(arr[0]);		//求任意數字數量
	int Min = arr[0];				//假設第一個數字為最小
	int count = 0;					//統計數字排列狀況
	int num = 0;					//統計重複數字數目
	
	int i = 0;
	do
	{
		if (arr[i] < Min)				//2、如果當前數字小於當前最小值
		{
			count = (count << (Min - arr[i]));	//   將count整體左移當前最小值與當前數字差值
			count++;				//   count加一,將當前數字放在第一位
			Min = arr[i];				//   替換最小值
		}
		else
		{						//3、如果當前數字大於於目前最小數字
			if (count&(1 << (arr[i] - Min)))	//   看次數字是否出現過
			{
				num++;				//   出現過,num加一
			}
			else
			{
				count |= 1 << (arr[i] - Min);	//1、 count第一個二進位制位表示最小數字,
			}					//    左邊n個位置表示(Min+n),數字出現該位置放1
		}						// “|=”也可以是“^=”,因為重複數字不會執行此句
		i++;
	} while (i < sz);					//每一個數字都進入判斷

	while (count % 2)		//%2為1表示第一個二進位制位為1
	{
		count /= 2;		//去掉第一個二進位制位
	}
	if (count)			//當count>0時,表示二進位制的1不連續,即所給數字不連續
	{
		printf("不連續\n");
	}
	else
	{				//否則,二進位制
		printf("有%d個連續數,%d個重複數字\n", (sz - num), num);
	}
	return 0;
}

執行結果