老抓狂啦 2022-10-21 19:56 采纳率: 66.7%
浏览 41
已结题

小球从平台上按平台高低程度下落,C语言刚学,希望有一个详细一点的解释

生日当天,小思收到了一个神秘的礼物——一颗小黄球。这颗小黄球有着一个梦想:它想要环游世界,奔赴星辰大海。但是小黄球自感脆弱无助,于是就告诉了小思,希望小思能够帮助它完成梦想。小思为它设计了一个3x3大小的九宫格沙盘,让它在里面自由练习滚动,期盼有朝一日小黄球能够规划出自己的征途,此时便是其启程告别之日。    沙盘外部由无限高的玻璃罩包裹,确保小黄球不会滚出沙盘。沙盘内部由9个可以自由升降的高台组成,每个高台有自己对应的编号(1,2,…9)和对应的高度(不一定是中间高四周低),相邻的高台之间由陡坡连接而成,小球可以在上面自由滚动。小球的每次模拟滚动满足以下规则:①初始起点为九宫格中心(⑤号位)。②小黄球会在四周可滚动方向高台中选择高度最小的一个进行滚动,且不具备爬升能力。③若四周可滚动方向高台中存在多个高台同为可选择中的最小值,则小黄球会犹豫不决,对前程感到迷茫,从而停止在原高台上。且小黄球不会滚向相同高度高台上。请你给出小黄球最终会停止在几号高台上。(对题目有疑惑可翻阅文档末)输入格式:一行不大于100的正整数,一共九个,代表高台①~⑨的高度,中间用空格隔开。输出格式:输出一个正整数,表示最终停留在的高台编号。输入样例1:3 6 8 5 11 7 4 8 3输出样例1:1输入样例2:4 6 8 5 11 7 4 8 3输出样例2:4需要提交的测试数据测试样本1:1 3 6 4 10 5 6 2 3测试样本2:5 1 5 2 5 3 5 4 5测试样本3:7 2 4 10 7 10 4 2 6测试样本4、5在代码上交后由评审测试。
  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-10-21 21:04
    关注

    就是在3*3矩阵中,从中心开始往四周找最低点,然后再找该最低点四周的最低点,直到没有低于该点的四周点,或者四周点中有多个最低点

    int a[3][3];
    
    int func(int *si,int *sj)
    {
        int i = *si;
        int j = *sj;
        int min = a[*si][*sj];
        int mincount = 0;
        if(i>0 && a[i-1][j] <= min)
        {
            if(a[i-1][j] < min)
            {
                min = a[i-1][j];
                *sj = j;
                *si = i-1;
                mincount = 1;
            }
            else
                mincount=2;
        }
        if(i<2 && a[i+1][j] <= min)
        {
            if(a[i+1][j] < min)
            {
                min = a[i+1][j];
                *sj = j;
                *si = i+1;
                mincount = 1;
            }
            else
                mincount=2;
        }
        if(j>0 && a[i][j-1] <= min)
        {
            if(a[i][j-1] < min)
            {
                min = a[i][j-1];
                *sj = j-1;
                *si = i;
                mincount = 1;
            }
            else
                mincount=2;
        }
        if(j<2 && a[i][j+1] <= min)
        {
            if(a[i][j+1] < min)
            {
                min = a[i][j+1];
                *sj = j+1;
                *si = i;
                mincount = 1;
            }
            else
                mincount=2;
        }
        return mincount;
    }
    
    int main()
    {
        int i,j;
        int si=1,sj=1;
        for(i=0;i<3;i++)
            for(j=0;j<3;j++)
                scanf("%d",&a[i][j]);
        while(func(&si,&sj)==1);
        printf("%d\n",(si+1)*3+sj+1);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月29日
  • 已采纳回答 10月21日
  • 创建了问题 10月21日

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?