-2

だから私は同じ番号の5つのインスタンスを見つける必要がある数字で構成されるデータの列を持っています.

したがって、たとえば、8,8,8,8,8,8,8,8,8,9,9,9,5,6,4,7,,6,2,3 などです。この 8 には、 9回発生。したがって、カウントを1回だけインクリメントしたいのは、8が9つあるにもかかわらず、コードが最初の8を取得し、5つの連続した数字を取得してインクリメントしているためです。次に、次の8を取り、カウントをインクリメントし、カウントが5になるところをインクリメントしますが、1にしたいのですが、最初に出現した任意の数字をベース値にし、5つの連続した数字を取り、カウントをインクリメントします. 次に、6 番目の 8 を取り、5 つの連続した 8 があるか、またはその特定の数があるかどうかを数えます。たとえば、8,8,8,8,8,8,9,9,9,9,9,9,9,9,5,5,5,5,5,1,1,2,2 ,5,4,3,6,7,9,3,4,2,2,2,2,2,1,2,1. この場合、カウントは 4 になるはずです。

   **count=0;
count1=0;
for i=1:length(data)-4
for j=i+1:i+4
if data(i)~=data(j)
count1=0;
break;
else
count1=count1+1;
end
if count1==5    % line 0
count=count+1;
%data(i,1)=data(i+5,1); //line 1   <=comment
%data(i)=data(i+5);     //line 2   <=comment
else
continue;
end
end**

If(count_consecutive==5){
count_main=count_main+1; ...
a[i]=a[i+5];// continue for the base value. It should skip all the numbers that were counted in the consecutive count one and take the next number as the base for counting the consecutive numbers}

私のエラーはロジックにあるため、どの言語のロジックでも問題ありません。助けてくれてありがとう。それは大歓迎です:)。

余分な精緻化

したがって、最初のものには、指定した方法で 5 つの連続した 8 しかありません。したがって、最初のものには出力 count =1 があります。2 番目の番号では、同じ開始番号の連続する 5 つの数字のうち 4 つがあります。したがって、出力は 4 になります。別の例として、8,8,8,8,8,8,8,8,8,8(10 の 8),9,9,9,9,4,5,6 が挙げられます。 、4,6,6,6,6,6. この では、カウントを 2 にインクリメントする 10 個の 8 と、もう一度カウントをインクリメントする別の 5 つの連続した 6 があるため、カウントは 3 である必要があります。合計数は 3 になります。

エラーは、配列インデックスを a[i] から a[i+5] にジャンプできないことです。したがって、最初のものには、指定した方法で 5 つの連続した 8 しかありません。したがって、最初のものには出力 count =1 があります。2 番目の番号では、同じ開始番号の連続する 5 つの数字のうち 4 つがあります。したがって、出力は 4 になります。別の例として、8,8,8,8,8,8,8,8,8,8(10 の 8),9,9,9,9,4,5,6 が挙げられます。 、4,6,6,6,6,6. この では、カウントを 2 にインクリメントする 10 個の 8 と、もう一度カウントをインクリメントする別の 5 つの連続した 6 があるため、カウントは 3 にする必要があります。合計数は 3 になります。私の問題は 、条件が満たされたときに for ループで配列インデックスをx から x+5にスキップ/ジャンプできないことです。

4

3 に答える 3

0

同じ要素を含むサブシーケンスの長さをカウントしconsecutive、サブシーケンスが終了するとすぐに、結果のカウンターをサブシーケンス内の N 要素で構成されるグループの数だけインクリメントする方が簡単です: result += consecutive / n:

public static int countConsecutiveN(int n, int ... arr) {
    if (null == arr || arr.length < n) {
        return 0;
    }
    int result = 0;
    int previous = arr[0];
    int consecutive = 1;
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] == previous) {
            consecutive++;
        } else { // consecutive sequence ended
            result += consecutive / n; // increment by the count of N elements in the subsequence
            consecutive = 1;
        }
        previous = arr[i];
    }
    // check the trailing subsequence
    result += consecutive / n;

    return result;
}

テスト

System.out.println(countConsecutiveN(5,
        8,8,8,8,8,8,            // six 8s
        9,9,9,9,9,9,9,9,9,9,    // ten 9s - 2 groups
        5,5,5,5,5,              // five 5s
        1,1,2,2,5,4,3,6,7,9,3,4,
        2,2,2,2,2,2,2,          // seven 2s
        1,2,
        1,1,1,1,1,1             // six 1s
));

出力

6
于 2021-03-01T10:53:46.800 に答える