給一串數字,判斷是否連續
阿新 • • 發佈:2019-01-01
題在標題,思路在程式碼
#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; }