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