问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++编程回形取数问题

发布网友 发布时间:2023-05-02 10:08

我来回答

2个回答

热心网友 时间:2023-11-06 15:20

#include <cstdio>

const int MAXM = 200 + 10;
int m, n;
int num[MAXM][MAXM] = {0};
int ans[MAXM*MAXM];
int tempo = 0;

void init()
{
    scanf("%d %d",&m,&n);
    int i, j;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d",&num[i][j]);
        }
    }
}

void solve(int beginrow, int beginline, int row, int line)
{
    int i, j;
    if (row == 0 || line == 0) return;
    if (row == 1)
    {
        for (i = 0; i < line; i++)
        {
            ans[tempo] = num[beginrow][beginline];
            beginline++;
            tempo++;
        }
        return;
    }
    if (line == 1)
    {
        for (i = 0; i < row; i++)
        {
            ans[tempo] = num[beginrow][beginline];
            beginrow++;
            tempo++;
        }
        return;
    }
    int v = beginrow, h = beginline;
    ans[tempo] = num[beginrow][beginline];
    tempo++;
    for (i = 0; i < row-1; i++)
    {
        v++;
        ans[tempo] = num[v][h];
        tempo++;
    }
    for (i = 0; i < line-1; i++)
    {
        h++;
        ans[tempo] = num[v][h];
        tempo++;
    }
    for (i = 0; i < row-1; i++)
    {
        v--;
        ans[tempo] = num[v][h];
        tempo++;
    }
    for (i = 0; i < line-2; i++)
    {
        h--;
        ans[tempo] = num[v][h];
        tempo++;
    }
    solve(v+1,h,row-2,line-2);
}

void output()
{
    int cnt = n*m;
    if (cnt == 0) return;
    printf("%d",ans[0]);
    for (int i = 1; i < cnt; i++)
    {
        printf(" %d",ans[i]);
    }
    printf("\n");
}

int main()
{
    init();
    int begin1 = m, begin2 = n;
    solve(0,0,begin1, begin2);
    output();
    return 0;
}

请参考,欢迎交流哈。

热心网友 时间:2023-11-06 15:21

#include<iostream>

#include<cstdio>

#include<stdlib.h>

#include<string.h>

#include<algorithm>

using namespace std;

int a[250][250];


int main(){

    int n, m;

   // memset(vis, 0, sizeof(vis));

    memset(a, -1, sizeof(a));

    cin >> n >> m;

    for(int i = 0; i < n; i++){

        for(int j = 0; j < m; j++){

            scanf("%d", &a[i][j]);

        }

    }

    int x = -1, y = 0, cnt = 0;

    while(cnt < n * m){

        while(x + 1 < n && a[x + 1][y] != -1){

            printf("%d ", a[++x][y]);

            a[x][y] = -1;

            cnt++;

        }

        while(y + 1 < m && a[x][y + 1] != -1){

            printf("%d ", a[x][++y]);

            a[x][y] = -1;

            cnt++;

        }

        while(x  - 1 >= 0 && a[x - 1][y] != -1){

            printf("%d ", a[--x][y]);

            a[x][y] = -1;

            cnt++;

        }

        while(y - 1 >= 0 && a[x][y - 1] != -1){

            printf("%d ", a[x][--y]);

            a[x][y] = -1;

            cnt++;

        }

    }

    cout << endl;

    return 0;

}

代码转载于:网页链接

题目的资源:网页链接

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑重装以后的漏洞是否需要修补? 你的电脑修复系统不用修复了吗电脑提示漏洞修复到底要不要修复 电脑系统重装漏调修复重要吗刚重装系统那些漏洞要修复吗win10_百度... 组装电脑系统漏洞可以修复吗电脑漏洞有必要修复吗 电脑新系统修复漏洞电脑提示漏洞修复到底要不要修复 韩国手机卡陷阱多多?一招教你完美避开所有坑! 东莞长安有哪几个区镇 东莞长安镇有哪几个村 东莞长安有哪些镇 东莞厦岗哪里有手工外发 刑侦队的解释 刑警队全称叫什么 带有一和四字的成语有哪些成语故事 刑警的词语刑警的词语是什么 刑警队的成语刑警队的成语是什么 褴毵的成语褴毵的成语是什么 杯渡的词语杯渡的词语是什么 优惠券app哪个好用能找到淘宝优惠券的软件 香妃蛋糕的售价是多少? 检验中级可以报病理技术副高吗 7720和8107都有什么区别啊?优化了什么啊? 阅读下面的宋词,然后回答问题。(7分)菩萨蛮[宋]黄庭坚半烟半雨溪桥畔,渔翁醉着无人唤。疏懒意何长 墨魂浣花草堂李白答案是什么 白面可以用来钓鱼吗?? 晚上宵夜的心情说说 吃宵夜晒朋友圈一句话 吃夜宵想发心情说说 吃宵夜后悔的说说 关于吃宵夜长胖后悔的说说_吃完夜宵罪恶感的句子 吃宵夜后悔的说说 梦见好多好大的鱼的预兆 梦见很多大的蛇的预兆 回形取数(蓝桥杯)c++? 在c语言中怎样从数组中取出一个数 C语言题(方格取数) 51单片机用C语言编写程序实现从30H单元开始的连续10个单元取数,一次存入到以40H单元开始的10个单元中。 夏普46GX3 样品机 可以买吗 液晶电视SONY 46V440和夏普 46GX3选哪台好? 夏普CLD-46GX3的液晶面板是原厂的吗? 夏普液晶46GX3屏幕出现问题 岁月如梭的意思是什么 幼儿园安全卫生方案 幼儿园食品卫生安全工作计划模板3篇 中草药喷雾机里面放什么能美容 床头忌讳放什么(床头忌讳放什么植物) 苏州站是苏州火车站吗 在网上玩游戏杂金杂金花该怎么办 多元线性回归与多元逐步回归分析是一回事吗 数据结构里面的线性表说插入时后面的元素向后移,为什么不是向前移啊 如何检验线性回归模型的显著性? 旬邑到彬县中巴能坐多少人 PS CS5出现“无法完成因为源文档与目标文档相同,怎么处理呢