a昊a 2019-07-17 15:19 采纳率: 66.7%
浏览 268
已采纳

关于顺时针打印数字程序的问题?

先上自己写的代码

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int limit;
    long count = 1;

    int k = 0;
    int b = 0;
    int j = 0;
    int c = 1;
    int e = 1;
    int f = 0;
    int h = 1;
    int m = 2;
    int p = 0;
    int n;

    printf("请输入矩形的边长:\n");
    scanf("%d",&limit);
    n = limit - 1;

    long canva[limit][limit];




    while(count != (limit * limit))
    {

        for(int i = j; i < limit - k; i++)//向右打印横行 
        {
            canva[j][i] = count++;
        }
        j++;
        k++;
        for(int a = c;a <= (n - b); a++)// 向下打印竖行 
        {
            canva[a][n-b] = count++;
        }
        c++;
        b++;

        for(int d = limit - e-1; d >=f ; d--)//反向打印横行 
        {
            canva[limit-e][d] = count++;
        }
        f++;
        e++;
        for(int g = limit - m; g >=h ; g--)//向上打印竖行 
        {
            canva[g][p] = count++;
        }
        h++;
        p++;
        m++;
    }
    for(int z = 0; z < limit; z++)//输出数组 
    {
        for(int v = 0; v < limit; v++)
        {
            printf("%5d",canva[z][v]);
            if( (v+1) % limit == 0)
            putchar('\n');
        }
    }

    putchar('\n');


    system("pause");



    return 0;
}

先不说这么写有多麻烦,我只想大神帮我看一下逻辑对不对,因为我在纸上
写了感觉是对的,但运行结果总不对,而且只有奇数才能跳出循环,输入偶数
的话就打印不出来
下面是运行结果
图片说明
这个是奇数
下一个输入偶数打印不出来,循环跳不出来
图片说明

  • 写回答

2条回答 默认 最新

  • qq_38798491 2019-07-17 15:29
    关注
    
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    void print_circle(vector< vector<int> > &arr,int a,int b,int c,int d)
    {
        if (a == c)
        {
            for(int i=b;i<=d;i++)
                cout<<arr[a][i]<<" ";
        }
        else if(b == d)
        {
            for(int i=a;i<=c;i++)
                cout<<arr[i][b]<<" ";
        }
        else
        {
            int row = a;
            int column = b;
            while(column != d)
                cout<<arr[a][column++]<<" ";
            while(row != c)
                cout<<arr[row++][column]<<" ";
            while(column != b)
                cout<<arr[c][column--]<<" ";
            while(row != a)
                cout<<arr[row--][b]<<" ";
        }
    }
    
    int main()
    {
    
        int m,n,temp;
        cin>>m>>n;
        vector< vector<int> > arr( m, vector<int>(n) );
        for(int i=0;i<arr.size();i++)
            for(int j=0;j<arr[0].size();j++)
            {
                cin>>temp;
                arr[i][j] = temp;
            }
    
    
        int a=0,b=0,c=m-1,d=n-1;
        while(a<=c && b<=d)
            print_circle(arr,a++,b++,c--,d--);
    
        system("pause");
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?