C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で8で割り切れる回転をカウントします


たくさん与えられます。目標は、8で割り切れるnumの回転をカウントすることです。

回転は何度も行うことができないので。 8で割り切れるプロパティを使用します。最後の3桁が8で割り切れる場合、数値は8で割り切れます。数値が1800の場合、回転は1800、0180、0018、1800のうち8001は8で割り切れます。

例を挙げて理解しましょう。

入力 − num =15320

出力 −4で割り切れる回転数は次のとおりです。1

説明 −回転は−

15320, 01532, 20153, 32015, 53201
Out of these, only 15320 is divisible by 8.

入力 − num =848484

出力 −4で割り切れる回転数は次のとおりです。3

説明 −回転は−

848484, 484848, 848484, 484848, 848484, 484848
Out of this all 484848’s are divisible by 8.

以下のプログラムで使用されているアプローチは次のとおりです

数値を文字列に変換し、forループを使用して数値をトラバースします。 3桁のペアごとに、それらを整数に変換し、8で除算可能性を確認します。除算可能である場合は、カウントをインクリメントします。

  • 長い数字と同じくらいの数を取ります。

  • 関数Rotation_8(long long num)は、数値numを受け取り、8で割り切れるnumの回転数を返します。

  • numを文字列str=to_string(num)に変換します。

  • numの桁数はlength=str.length()になります。

  • 3桁の整数値を格納するには、一時変数digit=0を使用します。

  • 初期カウントを0とします。

  • 長さが1の場合、1桁のみが存在します。整数に変換します。digit=(str.at(0)-’0’)。除算を8でチェックし、結果を1または0として返します。

  • 長さが2の場合、2桁のみが存在します。それらを整数に変換します。part_1=(str.at(0)-’0’)およびpart_2 =(str [1]-'0')* 10 +(str [0]-'0')。除算を8でチェックし、結果を1または0として返します。

  • それ以外の場合、長さが3桁以上の場合は、forループを使用して文字列をi=0からi=length-1までトラバースし、3文字を数字で整数値に変換します=(str [i]-'0')* 100 + (str [i + 1]-'0')* 10 +(str [i + 2]-'0'); 。桁の値が8インクリメントカウントで割り切れる場合。

  • 数字=(str [length --1]-'0')* 100 +(str [0]-' 0')* 10 +(str [1 ]-'0');

  • 8で除算可能性を確認し、カウントを更新します。

  • 結果として最後にリターンカウント。

#include <bits/stdc++.h>
using namespace std;
int Rotation_8(long long num){
   string str = to_string(num);
   int length = str.length();
   int digit = 0, count = 0;
   if (length == 1){
      if(digit % 8 == 0){
         return 1;
      }
      else{
         return 0;
      }
   }
   else if(length == 2){
      int part_1 = (str[0] - '0') * 10 + (str[1] - '0');
      int part_2 = (str[1] - '0') * 10 + (str[0] - '0');
      if (part_1 % 8 == 0){
         count++;
      }
      if (part_2 % 8 == 0){
         count++;
      }
      return count;
   }
   else{
      for(int i = 0; i < (length - 2); i++){
         digit = (str[i] - '0') * 100 + (str[i + 1] - '0') * 10 + (str[i + 2] - '0');
         if (digit % 8 == 0){
            count++;
         }
      }
   }
   digit = (str[length - 1] - '0') * 100 + (str[0] - '0') * 10 + (str[1] - '0');
   if(digit % 8 == 0){
      count++;
   }
   digit = (str[length - 2] - '0') * 100 + (str[length - 1] - '0') * 10 + (str[0] - '0');
   if(digit%8 == 0){
      count++;
   }
   return count;
}
int main(){
   long long num = 24040;
   cout<<"Count of rotations divisible by 8 are: "<<Rotation_8(num);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Count of rotations divisible by 8 are: 3

  1. C++で4で割り切れる回転をカウントします

    たくさん与えられます。目標は、4で割り切れるnumの回転をカウントすることです。 回転は何度も行うことができないので。 4で割り切れるプロパティを使用します。最後の2桁が4で割り切れる場合、数値は4で割り切れます。数値が1234の場合、回転は1234、4123、3412、2341になり、最後の2桁の12は4で割り切れます。 4で割り切れる。 例を挙げて理解しましょう。 入力 − num =15324 出力 −4で割り切れる回転数は次のとおりです。2 説明 −回転は− 15324, 41532, 24153, 32415, 53241 これらのうち、15324と41532は4で割

  2. C++でソートおよびローテーションされたリンクリストのローテーションをカウントします

    リンクリストが表示されます。リストは最初にソートされ、次にK個のノードでローテーションされます。目標は、Kの値を見つけることです。K個のノードだけ回転する入力としてリンクリストを以下に示す場合- それならオリジナルは-だったに違いない ここでKは2であることがわかります。入力リンクリストは、元のソートされたリンクリストの2ノードのローテーションです。 例を挙げて理解しましょう。 入力 −リスト:5→7→9→1→3 出力 リンクリストの要素は次のとおりです。5791 3 ソートおよびローテーションされたリンクリストのローテーション数は-3 説明 −元のソート済み