一点技巧

Posted on 2014-07-19 14:21  alexanderone  阅读(108)  评论(0编辑  收藏  举报

样题简易的意思就是N盏灯,K个人去关。第K个人只会按下和K成倍数的开关,最后问那几盏灯开着。

题目不难,但是代码里一些技巧很好:

#include<stdio.h>
main()
{
int n,i,k,j,m,first=1;
int a[1008]={0};
scanf("%d%d",&m,&n);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(j%i==0)
a[j]=!a[j];
for(i=1;i<=m;i++)
{if(a[i]){
if(first)
first=0;
else
printf(" ");
printf("%d",i);
}
}
}

首先memset这个函数要在string.h头文件下

么么set(a, 0, sizeof(a))是把数组清0;

当然我个人觉得直接int a[1000]={0};更简单,可能有其他因素吧。

关键它设置了一个FIRST 的变量,遇到first为1(首先就赋值为1)就直接反赋值为0;然后再打印数字,下次遇到0的first的时候就在else里面打出空格;

这个技巧会经常用到,以前都是糊里糊涂的,要不然系统不判别后面是否多一个空格,要是判定,我经常就循环打到倒数第二个,然后再打出一个没有带空格的最后一个。

最后还有一个,这个数组它并没有设成BOOL 型,但是在判断开关的时候用的就是和bool一样的方法,没搞懂int型的数组也能用  =!  ,可以取非??

思路就是这样。

Copyright © 2024 alexanderone
Powered by .NET 8.0 on Kubernetes