Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中使用数组打印图案_C - Fatal编程技术网

在c中使用数组打印图案

在c中使用数组打印图案,c,C,问题在于打印此图案: 5555555555 5444444445 5433333345 5432222345 5432112345 5432112345 5432222345 5433333345 5444444445 5555555555 这是我的代码: #include<stdio.h> int main() { int i,k,j,n,p; printf("enter the no : "); scanf("%d",&n); p =

问题在于打印此图案:

5555555555
5444444445
5433333345
5432222345
5432112345
5432112345
5432222345
5433333345
5444444445
5555555555
这是我的代码:

#include<stdio.h>
int main()
{
    int i,k,j,n,p;
    printf("enter the no  :  ");
    scanf("%d",&n);
    p = n;
    k = 0;
    int a[2*n][2*n];

    while (p>=1)
    {
        for(i=0+k;i<2*n-k;i++)
        {
            for(j=0+k;j<2*n-k;j++)
            {
                if(i == 2*n-k||i == k||j == k||j == 2*n-k)
                {
                    a[i][j]=p;
                }
                else
                {
                    a[i][j]= 8;
                }
            }
            printf("\n");
        }
        k++,p--;
    }
    for(i=0;i<2*n;i++)
    {
        for(j=0;j<2*n;j++)
        {
            printf("%d",a[i][j]);
        }
        printf("\n");
    }

    return 0;
}

您的代码过于复杂。你应该利用对称性。用此代码替换while循环

// Because of symmetry, both i and j can loop to n instead of 2*n
for(i=0; i<n; i++) {
    p = n;
    for(j=0; j<n; j++) {
        // Assign four cells at once due to both horizontal and vertical symmetry
        a[i][j] = a[i][2*n-j-1] = a[2*n-i-1][j] = a[2*n-i-1][2*n-j-1] = p;

        if(j<i)
            p--;
    }
}
//由于对称性,i和j都可以循环到n而不是2*n

对于(i=0;我建议您阅读。它包含关于如何解决此问题的宝贵建议。为什么您有
a[i][j]=8;
?打印8没有任何问题。@Mohammed Abdurrasheed输出模式不需要数组。这是为了避免垃圾值,但不会影响实际代码的值8应在您的帖子中稍后更改。我看到一个问题声明,但没有说明实际问题。我看到一种方法会导致有序列表,那么,您使用的方法到底有什么问题。例如,您显示的输出是否不正确?您认为问题出在代码中的什么地方?,…等等。请阅读。
// Because of symmetry, both i and j can loop to n instead of 2*n
for(i=0; i<n; i++) {
    p = n;
    for(j=0; j<n; j++) {
        // Assign four cells at once due to both horizontal and vertical symmetry
        a[i][j] = a[i][2*n-j-1] = a[2*n-i-1][j] = a[2*n-i-1][2*n-j-1] = p;

        if(j<i)
            p--;
    }
}