Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมค้นหาการรัน 1 ที่ยาวที่สุดในรูปแบบไบนารีของตัวเลขใน C++


สมมติว่าเรามีตัวเลข n เราต้องหาความยาวของ 1s ที่ต่อเนื่องกันยาวนานที่สุดในการแทนค่าไบนารี

ดังนั้น หากอินพุตเป็น n =312 เอาต์พุตจะเป็น 3 เนื่องจาก 312 เป็น 100111000 ในรูปแบบไบนารี และมี 1 วินาทีติดต่อกัน 3 ครั้ง

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ret :=0, len :=0

  • สำหรับการเริ่มต้น i :=0 เมื่อฉัน <32 อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ:

    • ถ้า n/2 เป็นเลขคี่ แล้ว

      • (เพิ่มเลน 1)

    • มิฉะนั้น

      • เลน :=0

    • ret :=สูงสุดของ ret และ len

  • รีเทิร์น

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:

ซอร์สโค้ด (C++) -

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(int n) {
      int ret = 0;
      int len = 0;
      for(int i = 0; i < 32; i++){
         if((n >> i) & 1){
            len++;
         }else{
            len = 0;
         }
         ret = max(ret, len);
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << ob.solve(312);
}

อินพุต

312

ผลลัพธ์

3