C 需要显示值为0的指示灯的索引号

C 需要显示值为0的指示灯的索引号,c,printf,C,Printf,我的代码显示了所有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

我的代码显示了所有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;
}
#包括
#包括
#定义灯光100
int main()
{
int arr[lights]={0},i,j;
printf(“关闭的灯:\n”);

对于(i=0;i,看起来您正在尝试解决灯泡难题。 这里有一个很好的解决方案:

我已经修复了你的代码,所以它可以工作,你必须小心索引

#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);
    }
  }
}
#定义灯光数量(100)
真空总管(真空)
{
int灯泡[NUM_OF_LIGHTS]={0};
int i,j;
对于(i=1;i<(灯的数量+1);i++)
{
对于(j=i;j<(灯的数量+1);j+=i)
{
/*切换索引灯泡。
*注意:调整数组,使其从0运行到99,而不是从1运行到100。
*/
灯泡[j-1]^=1;
}
}
/*把结果打印出来*/
printf(“关闭的灯:\n”);
对于(i=0;i
你知道如何计算一个数字的平方吗?我不知道你的嵌套循环在做什么。OT:数组索引从0变为
lights-1
所以
I在第一个循环中,它关闭所有的灯(因为它们是开的-1)并将它们更改为0,在第二个循环中,它每次跳两个灯并翻转开关(因此,如果它现在是1,它将是0)第三次如此(跳3个灯)直到100。您的代码与注释中的描述匹配。它似乎与问题标题无关,也与您显示的数字列表无关(可能是方号)。如果我理解正确,则带有0的指示灯会自动打开,这使得问题标题更加混乱。这里是否涉及素数?我之所以这样问,是因为如果你删除
If(arr[j]==0)arr[j]=1;否则如果(arr[j]==1)
,则你有一个(低效的)确定素数的筛子。