在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--;
}
}