| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 748 人关注过本帖
标题:大神求助,一题关于数组的题目。
只看楼主 加入收藏
cbbysq
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-10-29
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
大神求助,一题关于数组的题目。
图片附件: 游客没有浏览图片的权限,请 登录注册
,完全没有思路。
2016-10-29 20:31
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:5 
计算机编程就是个跑循环干体力活的。不是算术解、不一定非得动脑筋找窍门。
理解“202可以控制....个房间的灯”这句话应该不难。
就题中的例子来说你就建立数组【N】【N】={0},每次读一个房间号,修改一下数组,并且遍历数组统计当时有多少亮灯。
读完M个房间号,输出统计得到的Max就行了。。。

φ(゜▽゜*)♪
2016-10-30 00:23
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:15 
在纸上画个平面图比划比划,开关控制十字架,第一次必有2*N-1盏亮,第二次分三种情况:设,第一个开关在(a,b)第二次的开关在(a,b)第一个开关位——0盏;(2)第二个开关在(a+i,b)(1<=a+i<=N)或者(a,b+i)(1<=b+i<=N)这样会把一列或者是一行的灯灭掉,然后亮N-1盏灯,有也是2*N盏亮,亮的灯数减一,(3)第二个开关不在(a,b)的十字架上,这样会抵消原有的两盏灯,变成了2*(2*N-1)-2,即为4*N-3盏灯;在第M次开关时,如果M号所在的十字架的灯数大于N则该开关操作的总亮灯数减少,如果M号所在的十字架的灯数小于等于N则该开关的总亮灯数增多~具体算法有两种思路:
第一种:先把每一次开灯关灯的情况用0和1表示(0为关,1为开)然后每次游历坐标图一次,记录1的最大个数。
第二种思路~累加法:每涉及开关一次(初始值为0)都把该值加1,最后结束时再用n(表示操作次数)%2的值来判断开关情况,然后每游历一次坐标图就n--;再记录1的最大个数~如果我有空我还会深入研讨一下亮灭数增减问题(没空了~)

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-10-30 14:00
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 九转星河
本题还是编程直接求解简单,受本题而发,发表一下自制游戏“扫屏障”,玩法和本题的点灯相似,wsad上下左右移动,空格执行扫屏障操作,屏障扫光就为之胜利,地图可以自己改。游戏代码如下:
程序代码:
#include <stdio.h>
static int X,Y,T=1;
int main()
{
    void begin(char a[][12]);
    char a[12][12]=
    {
        "############",
        "#**      **#",
        "#*        *#",
        "#          #",
        "#          #",
        "#    o     #",
        "#          #",
        "#          #",
        "#          #",
        "#*        *#",
        "#**      **#",
        "############",
    };
    begin(a);
    printf("\n恭喜过关\n");
}
void begin(char a[][12])
{
    void run(char a[][12],char ch);
    int i,j,win;
    char ch;
    while (1)
    {
        for (i=0,win=1;i<=11&&T;i++,printf("\n"))
            for(j=0;j<=11;printf("%c",a[i][j]),j++)
            {
                if (a[i][j]=='o'||a[i][j]=='$')
                {
                    X=i;
                    Y=j;
                }
                if (a[i][j]=='*')
                    win=0;    
            }
            if (win&&T)break;  
        switch (ch=getch())
        {
            case 'w':
            case 's':
            case 'a':
            case 'd':
            case ' ':
            run(a,ch);
            break;
            default:T=0;
        }
    }          
}
void run(char a[][12],char ch)
{
    int i;
    int b[4],c[4];
    int u,v;
    u=X,v=Y;
    b[0]=X-1;c[0]=Y;
    b[1]=X+1;c[1]=Y;
    b[2]=X;c[2]=Y-1;
    b[3]=X;c[3]=Y+1;
    switch(ch)
    {
        case'w':u=X-1;v=Y;break;
        case's':u=X+1;v=Y;break;
        case'a':u=X;v=Y-1;break;
        case'd':u=X;v=Y+1;break;
    }
    if (a[u][v]!='#')
    {
        if (a[u][v]==' ')
            a[u][v]='0';
        if (a[u][v]=='*')
            a[u][v]='1';
        if (a[X][Y]=='o')
            a[X][Y]='0';
        if (a[X][Y]=='$')
            a[X][Y]='1';
        system("cls");
        T=1;    
    }
    else T=0;
    switch(a[u][v])
    {
        case'0':a[u][v]='o';break;
        case'1':a[u][v]='$';break;
    }
    switch(a[X][Y])
    {
        case'0':a[X][Y]=' ';break;
        case'1':a[X][Y]='*';break;
    }

    if (ch==' ')
    {
        for (i=0;i<=3;i++)
        {
            if (a[b[i]][c[i]]!='#')
                if (a[b[i]][c[i]]==' ')
                    a[b[i]][c[i]]='*';
                else if (a[b[i]][c[i]]='*')
                    a[b[i]][c[i]]=' ';    
        }
        if (a[X][Y]=='o')
            a[X][Y]='$';
            else a[X][Y]='o';
    }
    if (T)
    {
        X=u;
        Y=v;
    }
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-10-30 15:36
快速回复:大神求助,一题关于数组的题目。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037129 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved