开灯和蛇形

zhlabcd zhlabcd     2022-10-23     627

关键词:

竞赛初入门,发现题目是真的挺难的,一道题目看下来完全不知道在说什么,或者是没头绪,看了答案之后才慢慢能理解,嘛,一步一步来吧。

  • 开灯问题,有n盏灯,编号为1-n, 第一个人把所有的灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推,一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号,k <= n <= 1000.

样例输入:
7 3
样例输出:
1 5 6 7

  • 分析:这里直接用双重循环模拟操作,开着的关掉,关掉的打开,也就是逻辑或运算,而每次一个人开关的灯也可以用取余运算来解决。值得注意的是,第一个灯打开之后就不会关掉了。并且,输出的第一个灯的编号前面不能有空格。源代码如下:

    #include <stdio.h>
    #include <string.h>
    #define maxn 1010
    int a[maxn];
    int main(void)
    
        int lantern, person, first = 0;
        memset(a, 0, sizeof(a));
    
        scanf("%d%d", &lantern, &person);
        for(int i = 1; i <= person; i++)
            for(int j = 1; j <= lantern; j++)
                if(j % i == 0) 
                    a[j] = !a[j];
        for(int i = 1; i <= lantern; i++))
            if(a[i])
            
                if(first) first = 0;
                else printf(" ");
                printf("%d", i);
            
        printf("\n");
        return 0;
    
  • 蛇形填数:在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 < = 8.
  • 分析: 这个的话其实不难,模拟一下就好了,先将矩阵(二维数组)都初始化为0(方便做判断),注意不要越界。且要把第一个数字直接先标记成1。

    #include <stdio.h>
    #define maxn 20
    int a[maxn][maxn];
    int main(void)
    
        int n, x, y;
        memset(a, 0, sizeof(a));
    
        scanf("%d", &n);
        tot = a[x = 1][y = n - 1] = 1;
        while(tot < n * n)
        
            while(x + 1 < n && !a[x + 1][y]) a[++x][y] = ++tot;
            while(y - 1 >= 0 && a[x][y - 1]) a[x][--y] = ++tot;
            while(x - 1 >= 0 && !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;
    

以上。大概就是这样子。

开灯问题

问题描述:     开灯问题,有n盏灯,编号为1~n。第一个人把所有灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着... 查看详情

蛇形矩阵

如上图所示,是一个4*4的蛇形矩阵算法思路由图可观察到该矩阵可分为上三角和下三角。每个三角要根据蛇形的奇偶行进行计数。算法代码 #include<stdio.h>intmain(){inta[10][10];intn;printf("Inputn:");scanf("%d",&n);inti=0,j=0,k=0;intcount... 查看详情

开灯问题-----00004

描述有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k... 查看详情

命令模式

...,右边关,最后一个按钮为撤销上一次的操作。当我想要开灯的时候,就要按下左边第一个按钮,关灯则要按右边第一个按钮。此时,我们可以把开灯、关灯这些命令(行为),抽象成一个个对象。使行为请求者(我)持有这些... 查看详情

开灯问题

 有n盏灯,编号为1-n,第一个人把所有灯打开,第二个人按下所有编号两倍的开关(这些灯被关掉),第三个人按下所有编号三倍的开关,以此类推,一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯的编号,k&... 查看详情

开灯问题(代码片段)

有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后... 查看详情

nyoj77-开灯问题(倍数遍历)(代码片段)

77-开灯问题 内存限制:64MB时间限制:3000ms特判:No 通过数:13提交数:24难度:1题目描述:有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的... 查看详情

开灯问题--------《算法竞赛入门指导》p83

开灯问题。有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个... 查看详情

转换为 json 时续集下划线/蛇形大小写

】转换为json时续集下划线/蛇形大小写【英文标题】:Sequelizeunderscore/snakecasewhenconvertedtojson【发布时间】:2016-02-2403:32:05【问题描述】:使用Node和Sequelize,是否可以定义一个模型,该模型使用camelCase作为属性,但在转换为json时... 查看详情

[算法]循环打印矩阵,蛇形矩阵专题(代码片段)

1. 循环打印矩阵比方提供以下矩阵:按照如下顺序打印出来:12348121615141395671110这道题直接写也没问题,就是特别容易出错,稍不留意就写错,而且这类题型我想要一种普适性的解法。我想到的一种方法就是一圈一圈打印,... 查看详情

蛇形矩阵

蛇形举证样例:维数为3:123 894765 维数为5: 1 2 3 4 5 16171819 615242520 713121110 9代码输入输出实例:输入:3输出:123894765/***蛇形矩阵*@authordell1**/publicclassmartix{publicsta 查看详情

蛇形矩阵

题目:这个蛇形方阵大家都知道吧?不知道就看下面的矩阵找规律蛇形方阵【问题描述】输入n,n≤100。输出n阶蛇形方阵。例如n=5时,输出如下:1       2       6   &nb... 查看详情

蛇形矩阵

1/**2*蛇形矩阵3*4*@authorjinfeng5*6*/7publicclassSnakeMatrix{89/**10*输入一个整数n,返回填充数据后的蛇形矩阵,其实,所有的算法都可以看成数学题来做11*12*@paramn13*/14publicstaticint[][]getSnakeMatrix(intn){15int[][]matrix=newint[n][n];1617intc 查看详情

蛇形填数

??蛇形填数:描写叙述在n*n方陈里填入1,2,...,n*n,要求填成蛇形。比如n=4时方阵为:10111219161328151437654输入直接输入方陈的维数,即n的值。(n<=100)输出输出结果是蛇形方陈。例子输入3例子输出781692543上代码:#include<stdio.h>intN[10... 查看详情

开灯问题

开灯问题时间限制:3000ms           内存限制:65535KB难度:1描述有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有... 查看详情

蛇形矩阵

完成此类蛇形数组输入一个数,会输出一个蛇形数组,是n*n型矩阵1   2  3   4   516 17  18  19   6      15 24  25  20   714 23  22  21   813 12  11  10... 查看详情

蛇形方阵

蛇形填数。在n×n方阵里填入1,2,…,n×n,要求填成蛇形。例如,n=4时方阵为:10111219161328151437654上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n≤8。【解析】这道题的解题思路主要还是在于如何模拟蛇... 查看详情

算法竞赛入门经典_3.1_数组_逆序输出_开灯问题

又是新的一天,继续更新.今天进入了新的章节,数组和字符串1.逆序输出问题:先来看代码吧#include<stdio.h>//逆序输出2017-8-16#definemaxn105inta[maxn];intmain(intargc,char*argv[]){//inta[maxn];intx,n=0;while(scanf("%d",&x)==1)a[n++]=x;for(in 查看详情