提高项目37-各种“棋盘”

任务和代码:(1)为二维数组中的数据赋50以内的随机数(程序模板中setdata()函数已经完成,利用产生随机数的系统函数实现),

(2)设计函数out()按行输出二维数组中的数据;

(3)设计函数outDiagonal()输出从左上到右下对角线上的元素的值,如对图的数据而言,输出为48 34 12 31 40 42 34 45;再输出从右上到左下对角线上的值;

(4)将此数组视为“扫雷”游戏的界面(实际上扫雷游戏的界面一般就用二维数组保存其界面),通过键盘输入一个位置,输出其周围八个格子中的数据,如输入2 2时,输出34 30 47 29 48 14 12 31(注意:一共八个,不包括该位置上的数)(参见图中的黄色部分),计算这些数的和并输出。另外,如果选择的位置在边缘或角上时,周围的格数不够八个,按实际个数输出。请用循环有规律地列举出来各个值,不要采用顺序结构逐个罗列。这项功能由函数mine()完成。

(5)设计函数change()改变数组中的值。改变的规则是:从第2行(即a[1]行)开始到最后一行,每一元素是其正上方元素和右上方元素之和,例如a[1][0]取a[0][0]和a[0][1]之和,a[1][1]取a[0][1]和a[0][2]之和,……。对各行最后一列元素,其右上方无数据,取上一行中的第一个元素,如a[1][7]取a[0][7]和a[0][0]之和。对上图中的数据,a[1]行的元素将依次为:50(48+2) 27(2+25) 41 30 33 63 60 64(16+48),a[2]行依次为77
68…114。

/*
文件名:main.c
作者:小风景
完成日期:2016.7.18
问题描述:(1)为二维数组中的数据赋50以内的随机数(程序模板中setdata()函数已经完成,利用产生随机数的系统函数实现),
(2)设计函数out()按行输出二维数组中的数据;
(3)设计函数outDiagonal()输出从左上到右下对角线上的元素的值,如对图的数据而言,输出为48 34 12 31 40 42 34 45;再输出从右上到左下对角线上的值;
(4)将此数组视为“扫雷”游戏的界面(实际上扫雷游戏的界面一般就用二维数组保存其界面),通过键盘输入一个位置,输出其周围八个格子中的数据,如输入2 2时,输出34 30 47 29 48 14 12 31(注意:一共八个,不包括该位置上的数)(参见图中的黄色部分),计算这些数的和并输出。另外,如果选择的位置在边缘或角上时,周围的格数不够八个,按实际个数输出。请用循环有规律地列举出来各个值,不要采用顺序结构逐个罗列。这项功能由函数mine()完成。
(5)设计函数change()改变数组中的值。改变的规则是:从第2行(即a[1]行)开始到最后一行,每一元素是其正上方元素和右上方元素之和,例如a[1][0]取a[0][0]和a[0][1]之和,a[1][1]取a[0][1]和a[0][2]之和,……。对各行最后一列元素,其右上方无数据,取上一行中的第一个元素,如a[1][7]取a[0][7]和a[0][0]之和。对上图中的数据,a[1]行的元素将依次为:50(48+2) 27(2+25) 41 30 33 63 60 64(16+48),a[2]行依次为77 68…114。
程序输出:
*/

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void setdata(int a[8][8]);  //设置随机数
void out(int a[8][8]);      //输出数组
void outDiagonal(int a[8][8]);  //输出对角线元素的值
void mine(int a[8][8],int x, int y);        //按“扫雷”游戏的规则输出相邻格子
void change(int a[8][8]);               //按要求改变数值

int main()
{
    int a[8][8], x, y;
    setdata(a);
    out(a);
    outDiagonal(a);
    printf("输入一个位置:");
    scanf("%d %d", &x, &y);
    mine(a,x,y);
    change(a);
    out(a);
    return 0;
}

void setdata(int a[8][8])
{
    int i,j;
    srand(time(NULL));//根据系统的时间产生伪随机数种子
    for(i=0; i<8; i++)
        for(j=0; j<8; j++)
            a[i][j]=rand()%50+1; //产生50以内的随机数
    return;
}

//按行序优先输出数组
void out(int a[8][8])
{
    int i = 0;
    int j = 0;

    for(i = 0;i < 8;i++)
    {
        printf("第%d行的数据:",i);
        for(j = 0;j < 8;j++)
        {
            printf("%7d",a[i][j]);
        }
        printf("\n");
    }
}

//输出对角线元素的值(从左上到右下、从右上到左下)
void outDiagonal(int a[8][8])
{
    int i = 0;
    int j = 0;

    printf("从左上到右下输出对角线元素的值:\n");
    for(i = 0;i < 8;i++)
    {
        printf("a[%d][%d] = %d\n",i,i,a[i][i]);
    }

    printf("从右上到左下,输出对角线元素的值:\n");
    for(i = 0,j = 7;i < 8;i++)
    {
        printf("a[%d][%d] = %d\n",i,j,a[i][j]);
        j--;
    }
    printf("\n");
}

//按扫雷游戏规则,输出a[x][y]周围的8个数字
void mine(int a[8][8],int x, int y)
{
    int i = 0;
    int j = 0;
    int sum = 0;

    printf("a[%d][%d]周围的元素为:\n",x,y);
    for(i = x - 1;i <= x + 1;i++)
    {
        for(j = y - 1;j <= y + 1;j++)
        {
            if((i >=0) && (i <= 7) && (j >= 0) && (j <= 7) && !((i == x) && (j == y)))
            {
                printf("%5d",a[i][j]);
                sum += a[i][j];
            }
        }
    }

    printf("\n");
    printf("周围元素之和为:%d\n",sum);

}

//按题目中所言规则更改元素的值
void change(int a[8][8])
{
    int i = 0;
    int j = 0;

    for(i = 1;i <= 7;i++)
    {
        for(j = 0;j <= 7;j++)
        {
            if(j == 7)
            {
                a[i][j] = a[i - 1][j] + a[i - 1][j - 7];
            }
            else
            {
                a[i][j] = a[i - 1][j] + a[i - 1][j + 1];
            }
        }
    }
}

程序运行结果:

时间: 2024-08-02 08:17:56

提高项目37-各种“棋盘”的相关文章

管理案例:如何提高项目周例会的效率和效果?

案例描述:李工是某互联网公司产品技术部项目经理,李工已拥有近3年的项目管理经验,成功领导了4个小型产品项目的研发工作.2014年5月份之前,李工管理的项目团队都是只有7.8个人左右的规模,他组织召开项目的周例会时,采用的方式如下:周例会一般是半个小时左右的时间,项目组所有成员先各自报告前一星期的工作,然后讨论遇到的问题及解决方案:项目经理李工展示项目组前一星期的工作进展,同时布置本周的工作任务.一直以来,李工对这种方式的项目周例会所取得的效果很满意.2014年6月开始,李工被安排负责一个中等规模

Scrum团队和 PMO协作配合提高项目成功率

在很多公司里,有很多IT项目,特别是在软件公司里,很多开发团队并没有使用敏捷开发来进行项目管理.在某些情况下,尤其在一些公司里IT不是很受重视的,只能作为一个业务支撑部门,敏捷团队面临的主要问题,是缺乏来自高层的有力支持.在这种情况下,基于PMBOK的一些理念,我们需要通过增强项目管理办公室(PMO),来支持项目管理工作的开展. 这里提到了两个团队,一个是负责项目管理的PMO,一个是负责软件产品的Scrum开发团队,他们可以通过目前比较流行的方式方法(XP,Scrum,看板)等进行协作,以提高项

如何提高项目成功率

1 概述 古往今来做任何事情都是有成功或失败的概率的,当然做软件项目也不例外.如何降低项目的失败率,提高项目的成功率,确保项目的顺利验收,甚至通过项目运维挖掘新的商机,这也是每一名项目人员共同努力的目标.笔者作为数通畅联的一名技术员工,在工作期间参与了几个项目并且曾负责过公司内部产品前期开发的工作,对项目的把控有一些心得,希望能为大家提供一些参考. 2 预期读者 数通畅联内部员工 IT相关行业从业者 3 阶段分析 沈阳数通畅联软件技术有限公司主要耕耘于应用系统集成领域的专业技术团队,是一个集成产

管理案例:怎样提高项目周例会的效率和效果?

案例描写叙述:李工是某互联网公司产品技术部项目经理.李工已拥有近3年的项目管理经验,成功领导了4个小型产品项目的研发工作.2014年5月份之前.李工管理的项目团队都是仅仅有7.8个人左右的规模,他组织召开项目的周例会时,採用的方式例如以下:周例会通常是半个小时左右的时间,项目组全部成员先各自报告前一星期的工作,然后讨论遇到的问题及解决方式:项目经理李工展示项目组前一星期的工作进展,同一时候布置本周的工作任务. 一直以来.李工对这样的方式的项目周例会所取得的效果非常惬意.2014年6月開始,李工被

合理优化数据库表结构提高项目执行效率[数据库设计]

数据库表设计优化: 有时为了提高数据库效率,可适当考虑反三范式,适当添加冗余字段,减少多表去关联查询. 使用索引: 2.1 数据库表设计时要合理的去使用普通索引.主键索引.唯一索引.全文索引以及复合(组合)索引. 2.2 何时创建索引: (1) 较频繁的作为查询条件的字段; (2) 唯一性太差的字段(如性别/状态字段等),即使我们频繁作为查询的条件,匀不适合创建索引; (3) 数据更新非常频繁的字段(如统计平台当前的在线人数字段/商品的销售数量字段等)是不适合创建索引. 2.3 具体索引的使用请

如何提高项目实施的成功率

从二零零九年五月份开始步上项目实施这条路,一走就是整整六年的时间.六年中有一半的时间总是在困惑项目的不确定性因素太多,客户太难搞定,需求总是层出不穷,验收报告往往是只有一步之遥. 近期经过查看"如何把ERP项目实施好"的相关资料时,通过对自我工作的总结,得到实施成功的六大要素:启动背景.工作目标.定制计划.及时沟通.快速执行.结果必验.

提高项目的可维性:目录组织结构清晰和目录的深度不要多

不使用单一入口的框架开发,代码和目录的数量越来越臃肿,项目维护成本很高 没有反面例子来做借鉴,人的大脑不以为然.下面的截图就是一个中型项目后来变成的目录结构,项目的代码越来越乱,开发人员不愿意去维护这个系统的代码,因为去找代码进行修改,变得很痛苦,代码混乱,目录很众多,找代码会看花眼. 是一套典型是基于discuz的ucenter的系统,随着公司业务量越来越大,随着时间的推移,对系统增加的功能越来越多,后来开发人员越来越多.这样一套系统,维护起来很困难. 具体到里面代码,找代码去修改,特别吃力,

界面设计37点需要注意的细节

1 尽量使用单列而不是多列布局 单列布局能够让对全局有更好的掌控.同时用户也可以一目了然内容.而多列而已则会有分散用户注意力的风险使你的主旨无法很好表达.最好的做法是用一个有逻辑的叙述来引导用户并且在文末给出你的操作按钮. 2 放出礼品往往更具诱惑力 给用户一份精美小礼品这样的友好举动再好不过了.具体来讲,送出礼品也是之有效的获得客户忠诚度的战术,这是建立在人们互惠准则上的.而这样做所带来的好处也是显而易见的,会让你在往后的活动进展(不管是推销,产品更新还是再次搞活动)中更加顺利. 3 合并重复

2017 年度码云新增项目排行榜 TOP 50,为它们打“call”

2017 年度码云新增项目排行榜 TOP 50 正式出炉 !2017 结束了,我们来关注一下这一年里码云上新增的最热门的开源项目吧.此榜单根据 2017 年在码云上新增开源项目的 Watch.Star.Fork 数量以及其他角度进行统计,从而得出前 50 名最热门的开源项目. 码云发展至今,越来越多的开源作者选择在上面开源自己的作品,通过这份 2017 码云新增项目 TOP 50 榜单,希望大家可以了解到 2017 年里国内开源的现状,也能在其中找到自己需要的项目. 1.guns Guns 基于