Computer >> Máy Tính >  >> Lập trình >> lập trình C

Đếm số 1 trong mảng sau khi N di chuyển trong C


Chúng ta được cung cấp một mảng có kích thước N. Ban đầu mảng có tất cả các số 0. Nhiệm vụ là đếm số không. của 1 trong mảng sau khi N di chuyển. Mỗi nước đi thứ N có một quy tắc liên quan. Các quy tắc là -

  • Nước đi thứ nhất - Thay đổi phần tử ở các vị trí 1, 2, 3, 4 ………… ..

  • Nước đi thứ 2 - Thay đổi phần tử ở các vị trí 2, 4, 6, 8 ………… ..

  • Nước đi thứ 3 - Thay đổi phần tử ở các vị trí 3, 6, 9, 12 ………… ..

Đếm số 1 trong mảng cuối cùng.

Hãy cùng hiểu với các ví dụ.

Đầu vào

Arr[]={ 0,0,0,0 } N=4

Đầu ra

Number of 1s in the array after N moves − 2

Giải thích - Mảng sau khi di chuyển sau -

Move 1: { 1,1,1,1 }
Move 2: { 1,0,1,0 }
Move 3: { 1,0,0,3 }
Move 4: { 1,0,0,1 }
Number of ones in the final array is 2.

Đầu vào

Arr[]={ 0,0,0,0,0,0} N=6

Đầu ra

Number of 1s in the array after N moves − 2

Giải thích - Mảng sau khi di chuyển sau -

Move 1: { 1,1,1,1,1,1,1 }
Move 2: { 1,0,1,0,1,0,1 }
Move 3: { 1,0,0,1,0,0,1 }
Move 4: { 1,0,0,0,1,0,0 }
Move 5: { 1,0,0,0,0,1,0 }
Move 4: { 1,0,0,0,0,0,1 }
Number of ones in the final array is 2.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi lấy một mảng số nguyên Arr [] được khởi tạo với số nguyên 0 và N.

  • Hàm Onecount lấy Arr [] và nó có kích thước N làm đầu vào và trả về không. những cái trong mảng cuối cùng sau khi N di chuyển.

  • Vòng lặp for bắt đầu từ 1 cho đến cuối mảng.

  • Mỗi tôi đại diện cho nước đi thứ i.

  • Vòng lặp for lồng nhau bắt đầu từ chỉ mục thứ 0 cho đến cuối mảng.

  • Đối với mỗi lần di chuyển thứ i, nếu chỉ số j là bội số của i (j% i ==0), hãy thay thế 0 bằng 1 tại vị trí đó.

  • Quá trình này tiếp tục cho từng i cho đến khi kết thúc mảng.

  • Lưu ý - Chỉ mục bắt đầu từ i =1, j =1 nhưng chỉ số mảng từ 0 đến N-1. Vì lý do này, arr [j1] được chuyển đổi mỗi lần.

  • Cuối cùng duyệt lại toàn bộ mảng và đếm không. của 1 trong số đó và lưu trữ vào số lượng.

  • Số lượt trả về là kết quả mong muốn.

Ví dụ

#include <stdio.h>
int Onecount(int arr[], int N){
   for (int i = 1; i <= N; i++) {
      for (int j = i; j <= N; j++) {
         // If j is divisible by i
         if (j % i == 0) {
            if (arr[j - 1] == 0)
               arr[j - 1] = 1; // Convert 0 to 1
            else
               arr[j - 1] = 0; // Convert 1 to 0
         }
      }
   }
   int count = 0;
   for (int i = 0; i < N; i++)
      if (arr[i] == 1)
         count++; // count number of 1's
   return count;
}
int main(){
   int size = 6;
   int Arr[6] = { 0 };
   printf("Number of 1s in the array after N moves: %d", Onecount(Arr, size));
return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Number of 1s in the array after N moves: 2