题
例题3-1 逆序输出
#include<stdio.h> #define maxn 105 int a[maxn]; int main() { int x, n = 0; while (scanf("%d", &x) == 1) { a[n++] = x; } // n++是事后增加,所以这里a[n]里没东西 for (int i = n - 1; i >= 1; --i) { printf("%d ", a[i]); } printf("%d ", a[0]); return 0; }
例题3-2 开灯问题
#include<stdio.h> #include<string.h> #define maxn 1010 int a[maxn]; int main() { int n, k, first = 1; // 为了避免输出 // 多余空格,设置了一个标志变量first,可 // 以表示当前要输出的变量是否为第一个。 第一个变 // 量前不应有空格,但其他变量都有。 memset(a, 0, sizeof(a)); // 数组a清零,它也在string.h中定义 scanf("%d%d", &n, &k); // 有n盏灯,k个人 for(int i = 1; i <= k; ++i) { // 每个人轮流操作 for(int j = 1; j <= n; ++j) { if(j % i == 0) { a[j] = !a[j]; // 实测!1得0以及!0得1 } } } for(int i = 1; i <= n; i++) { if (a[i]) { if (first) { first = 0; } else { printf(" "); } printf("%d", i); } } printf(" "); return 0; }
参考
[1] 为什么大的数组要定义在main函数外? - C语言论坛 - 编程论坛