逆序输出
- #include<stdio.h>
- #define maxn 105
- int s[maxn];
- int main()
- {
- int n=0,x;
- while(scanf("%d",&x)!=EOF){
- s[n]=x;
- n++;
- }
- for(int i=n-1;i>=1;i--){
- printf("%d ",s[i]);}
- printf("%d\n",s[0]);
- return 0;
- }
这是没有运行出来的代码,不知道原因。
注意:
- 比较大的数组应该声明在main函数之外,否则程序可能无法进行。
- 如果要从数组a复制k个元素到数组b,可以
#include<string.h>
memcpy(b,a,sizeof(int)*k);
- 如果需要把数组a全部复制到数组b中,
memcpy(b,a,sizeof(a));
开灯问题
题目:
有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯被打开, 开着灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?
输入:n和k,输出开着的灯编号。k≤n≤1000。
样例输入:7 3
样例输出:1 5 6 7
代码:
- #include<stdio.h>
- #include<algorithm>
- #define maxn 1005
- int s[maxn];
- int main()
- {
- int n,k,flag=1;
- memset(s,0,sizeof(s));
- scanf("%d%d",&n,&k);
- for(int i=1;i<=k;i++)
- for(int j=1;j<=n;j++)
- if(j%i==0)
- s[j]=!s[j];
- for(int i=1;i<=n;i++)
- {
- if(s[i]){
- if(flag)flag=0;
- else printf(" ");
- printf("%d",i);
- }
- }
- printf("\n");
- return 0;
- }
思路:
首先定义数组s,并将它全部赋值为0,模拟操作,关为0,开为1.
蛇行填数
题目:
描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3
样例输出
7 8 1 6 9 2 5 4 3
代码:
- #include<stdio.h>
- #include<algorithm>
- #define maxn 20
- int a[maxn][maxn];
- int main()
- {
- int n,x,y,tot=0;
- scanf("%d",&n);
- memset(a,0,sizeof(a));//清零
- tot=a[x=0][y=n-1]=1;
- while(tot<n*n){
- while(x+1<n&&!a[x+1][y])a[++x][y]=++tot;//判断下一个元素是否无值 向下
- while(y>=1&&!a[x][y-1])a[x][--y]=++tot;//使用++x(使用+1后的值计算表达式) 向左
- while(x>=1&&!a[x-1][y])a[--x][y]=++tot;// 向上
- while(y+1<n&&!a[x][y+1])a[x][++y]=++tot;//向右
- }
- for(x=0;x<n;x++){
- for(y=0;y<n;y++)
- printf("%3d",a[x][y]);
- printf("\n");
- }
- return 0;
- }