Необходимо показать индекс для ламп, которые имеют значение 0 - PullRequest
0 голосов
/ 04 июня 2018

мой код показывает все 100 "источников света" со значениями 1 и 0, что мне нужно сделать (и не удается ..), чтобы показать только источники света, которые имеют значение 0 (так что это эти источники [и этицифры - это то, что нужно показать] 1, 4, 9, 16, 25, 36, 49, 64, 81, 100).Спасибо за помощь.

Текущий код:

#include <stdio.h>
#include <conio.h>
#define lights 100
int main()
{
    int arr[lights] = { 0 }, i, j;
    printf("Lights that are off:\n");
    for (i = 0; i <= lights; i++)
        arr[i] = 1;
    for (i = 1; i <= lights; i++)
    {
        for (j = i; j <= lights; j += i)
        {
            if (arr[j] == 0)
                arr[j] = 1;
            else if (arr[j] == 1)
                arr[j] = 0;
        }
    }
    for (i = 1; i <= lights; i++)
        printf("%d ", arr[i]);
    return 0;
    _getch;
}

1 Ответ

0 голосов
/ 05 июня 2018

Похоже, вы пытаетесь решить головоломку с лампочкой.Здесь есть хорошее решение: http://puzzles.nigelcoldwell.co.uk/six.htm

Я исправил ваш код, чтобы он работал, вы должны быть осторожны с индексацией.

#define NUM_OF_LIGHTS             (100)

void main(void)
{
  int bulbs[NUM_OF_LIGHTS] = { 0 };
  int i, j;

  for (i = 1; i < (NUM_OF_LIGHTS + 1); i++)
  {
    for (j = i; j < (NUM_OF_LIGHTS + 1); j += i)
    {
      /* Toggle the indexed bulb.
       * Note: adjust the array as it runs from 0 to 99, not 1 to 100.
       */
      bulbs[j - 1] ^= 1;
    }
  }
  /* Print out the result. */
  printf("Lights that are off:\n");
  for (i = 0; i < NUM_OF_LIGHTS; i++)
  {
    /* Only showing the bulb index for lights that are switched off. */
    if (bulbs[i] == 0)
    {
      printf("%d ", i + 1);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...