老抓狂啦 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日

悬赏问题

  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的