对上篇进行补充如下两条:
1、
//3-1逆序输出
#include<stdio.h>
#define maxn 10
int a[maxn];
int main(){
int x,n=0;
while(scanf("%d",&x)==1) //当输入不是int型时,输入结束,之前输入的int值按从大到小输出
a[n++] = x;
for(int i = n-1;i>=1;i--)
printf("%d",a[i]);
printf("%d\n",a[0]);
return 0;
}
- while(scanf(“%d”,&x)==1) 在上一篇中就有提到。目前已知的功能,是控制输入时为整型则继续输入。数字之间以空格或回车间隔。(回车和空格无法作为结束符号)
2、
有n盏灯,编号为1~n,第一个人把所有灯打开,第二个人按下所有编号为2的倍数开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),一次类推,一共有k个人,问最后哪些灯开着?
//开灯问题
#include<stdio.h>
#include<string.h>
#define maxn 1010
int a[maxn];
int main(){
int n,k,first=1;
memset(a,0,sizeof(a)); //memset是数组清零函数,此处用作数组初始化为0,其头文件 #include<string.h>
scanf("%d%d",&n,&k);
for(int i=1;i<=k;i++)
for(int j= 1;j<=n;j++)
if(j%i == 0) a[j] = !a[j];
for(int i=1;i<=n;i++)
if(a[i]){
if(first) first = 0;
else printf(" ");
printf("%d",i);
}
printf("\n");
return 0;
}
该程序中有两个技巧值得注意
1)memset(a,0,sizeof(a))
把数组清零。
2)为了避免输出多余空格,设置了一个标志变量first,可以表示当前要输出的变量是否为第一个。第一个变量前不应有空格,但其他变量都有。【可以说是很细节了】