小代码 千灯问题 (小学级别的感觉)
/****************环境http://tool.lu/coderunner/*解说:*千灯问题一每个人关的自己的倍数******************/#include<stdio.h>#include<stdlib.h>#include<string.h>#definemax1000+10inttest1(){inti,j,n,k,first=0;inta[max];intCOUNT=0;n=1000;k=3;memset(a,0,sizeof(a));//0代表关灯,1代表开灯for(i=1;i<=k;i++)//k个人for(j=1;j<=n;j++)//n个灯if(j%i==0)a[j]=!a[j];//取反,0变1,1变0,原来开变关,关变开/***************i=11000个全部置为1i=22偶数倍全置相反为0i=33的倍数全部相反编号612186的倍数转了2次变为1******************/for(i=1;i<=n;i++)//最后输出a[i]的值就可以了if(a[i]){printf("%d",i);COUNT++;}printf(":::::%d",COUNT);//不明白你的代码里面first是干嘛用的return0;}inttest2(){/****************环境http://tool.lu/coderunner/*解说:*千灯问题二关掉指定的倍数灯*简单实现不优化版本******************/inti,j,n,k1,k2,first=0;inta[max];intCOUNT=0;n=1000;k1=3;k2=7;for(i=0;i<=n;i++)a[i]=i;for(i=0;i<=n;i++)if(a[i]%k1==0)a[i]=0;for(i=0;i<=n;i++)if(a[i]%k2==0)a[i]=0;for(i=1;i<=n;i++)if(a[i]){COUNT++;}printf(":::::%d",COUNT);//不明白你的代码里面first是干嘛用的return0;}intmain(){test1();test2();return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。