一條長廊里依次裝有n(1 ≤ n ≤ 65535)盞電燈,從頭到尾編號1、2、3、…n-1、n。每盞電燈由一個拉線開關控制。開始,電燈全部關著。
有n個學生從長廊穿過。第一個學生把號碼凡是1的倍數的電燈的開關拉一下;接著第二個學生把號碼凡是2的倍數的電燈的開關拉一下;接著第三個學生把號碼凡是3的倍數的電燈的開關拉一下;如此繼續下去,最后第n個學生把號碼凡是n的倍數的電燈的開關拉一下。n個學生按此規定走完后,長廊里電燈有幾盞亮著。
注:電燈數和學生數一致。
下面是我的程式:不知道為啥當定義n為奇數時就不輸出結果
#include"stdio.h"
#define n 6
int main()
{
int i,j,a[n],k=0;
for(i=1;i<=n;i++)
a[i]=1;
for(i=2;i<=n;i++)
{
for(j=i;j<=n;j=j+i)
a[j]=(a[j]+1)%2;
}
for(i=1;i<=n;i++)
if(a[i]==1)k++;
printf("there are %d light on",k);
return 0;
}
uj5u.com熱心網友回復:
C語言下標是從0開始。#include"stdio.h"
#define n 6
int main()
{
int i,j,a[n+1],k=0;
for(i=1;i<=n;i++)
a[i]=1;
for(i=2;i<=n;i++)
{
for(j=i;j<=n;j=j+i)
a[j]=(a[j]+1)%2;
}
for(i=1;i<=n;i++)
if(a[i]==1)k++;
printf("there are %d light on",k);
return 0;
}
uj5u.com熱心網友回復:
嗯嗯,陣列的下標是從0開始的。a[n]的取值是 a[0]-----a[n-1];若取值a[n]陣列就越界了。uj5u.com熱心網友回復:
#pragma hdrstop
#define N 100
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
int a[N];
int i,j,light=0;
memset(a,-1,N);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if((j+1)%(i+1)==0)
a[j]=-a[j];
for(j=0;j<N;j++)
if(a[j]==1)
light++;
printf("light_sum:%d ",light);
getchar();
return 0;
}
uj5u.com熱心網友回復:
上面的有問題
#pragma hdrstop
#define N 1000
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
char a[N];
int i,j,light=0;
memset(a,-1,N);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if((j+1)%(i+1)==0)
a[j]=-a[j];
for(j=0;j<N;j++)
if(a[j]==1)
{
printf("%d , ",j+1);
light++;
}
printf("light_sum:%d ",light);
getchar();
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/132767.html
標籤:基礎類
