C 以特殊格式输出一些值
我正在努力解决一些问题。但是我的代码有点问题。 问题是:给定一个数字n,按以下格式输出n*n 输入:C 以特殊格式输出一些值,c,C,我正在努力解决一些问题。但是我的代码有点问题。 问题是:给定一个数字n,按以下格式输出n*n 输入: n=3 输出: 7 8 1 6 9 2 5 4 3 这是我的代码:(我知道其中有一些bug,但我无法修复。如果你有更好的想法,请帮助我。) 先谢谢你 #include<stdio.h> #include<stdlib.h> void oput(int **matrix,int n); int main() { int x=0,y=0,n,k=1;
n=3
输出:
7 8 1
6 9 2
5 4 3
这是我的代码:(我知道其中有一些bug,但我无法修复。如果你有更好的想法,请帮助我。)
先谢谢你
#include<stdio.h>
#include<stdlib.h>
void oput(int **matrix,int n);
int main()
{ int x=0,y=0,n,k=1;
scanf("%d",&n);
int **matrix = malloc(sizeof(int)*n*n);
if(matrix==NULL)
{
perror("can't allocate");
return 1;
}
//Input values to x*y matrix
while(n>=1)
{
for(x=0,y=n-1;x<n;x++)
{
matrix[x][y]=k++;
}
for(x=n-1,y=n-1;y>=0;y--)
{
matrix[x][y]=k++;
}
for(x=n-1,y=0;x>=0;x--)
{
matrix[x][y]=k++;
}
n--;
}
oput(matrix,n);
free(matrix);
return 0;
}
//output values by row.
void oput(int **matrix,int n)
{
int i=0,j=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",matrix[i][j]);
}
printf("\n");
}
}
#包括
#包括
无效运算(整数**矩阵,整数n);
int main()
{int x=0,y=0,n,k=1;
scanf(“%d”和“&n”);
int**matrix=malloc(sizeof(int)*n*n);
if(矩阵==NULL)
{
perror(“无法分配”);
返回1;
}
//x*y矩阵的输入值
而(n>=1)
{
对于(x=0,y=n-1;x=0;y--)
{
矩阵[x][y]=k++;
}
对于(x=n-1,y=0;x>=0;x--)
{
矩阵[x][y]=k++;
}
n--;
}
oput(矩阵,n);
自由(矩阵);
返回0;
}
//按行输出值。
无效操作(整数**矩阵,整数n)
{
int i=0,j=0;
为了(i=0;i只是为了好玩,我研究了这个问题的解决方案。
我还不允许在这个问题下写评论,所以我认为从矩阵的右上角开始“螺旋编号”是这个问题的一个要求
我的解决方案是使用四个不同的循环在周长上添加数字,然后再次开始添加缩进级别
#include <stdio.h>
#include <string.h>
void printMatrix( int *nMatrix, int n, char *title )
{
int i, j;
if( title )
printf( "%s\n", title );
for( i=0; i<n; i++ )
{
for( j=0; j<n; j++ )
{
printf( "%d\t", *(nMatrix+n*i+j) );
}
printf( "\n" );
}
}
void main( int argc, char *argv[] )
{
if( argc == 2 )
{
int n = atoi ( argv[1] );
int i, j;
printf( "Input value: %d\n", n );
if( n > 0 && n <= 10 )
{
int spiral[n][n];
int indentNr, x, y, lastNr=0;
memset( spiral, 0, n*n*sizeof( int ));
/* As indentNr is incremented, inner frames are filled */
for( indentNr=0; n-2*indentNr>0; indentNr++ )
{
/* Go South */
for( x=indentNr, y=n-1-indentNr; x<n-indentNr; x++ )
{
spiral[x][y] = ++lastNr;
}
/* Go West (Village People, 1979) */
for( y=n-2-indentNr, x=n-1-indentNr; y>=indentNr; y-- )
{
spiral[x][y] = ++lastNr;
}
/* Go North */
for( x=n-2-indentNr, y=indentNr; x>=indentNr; x-- )
{
spiral[x][y] = ++lastNr;
}
/* Go East */
for( y=1+indentNr, x=indentNr; y<n-1-indentNr; y++ )
{
spiral[x][y] = ++lastNr;
}
}
/* Print results */
printMatrix( &(spiral[0][0]), n, "Final spiral:" );
}
else
{
printf( "ERROR: 'n' too big!\n" );
}
}
else
{
printf( "USAGE: spiral n\n" );
}
}
#包括
#包括
无效打印矩阵(int*nMatrix,int n,char*title)
{
int i,j;
如果(标题)
printf(“%s\n”,标题);
对于(i=0;i=indentNr;x--)
{
螺旋[x][y]=++lastNr;
}
/*向东走*/
对于(y=1+indentNr,x=indentNr;y可能是错误的,用malloc
代替动态分配可能是更好的主意。提示:由于在循环中不使用j
,for(j=n;j>=1;j-->)(j=n,n-1,…,2,1)可以写成for(j=n;j--)
(j=n-1,n-2,…,1,0)就我个人而言,我会使用2d数组。我的意思是,你当然可以用1d数组(a[I*n+j]
而不是a[I][j]
)来模拟它,但没有理由问自己\n
做什么以及什么时候想使用它。是的,最好是struct node*nodeptr=malloc(sizeof(*nodeptr)*n*n);
。请记住处理分配错误,例如(nodeptr==NULL){/*a位置失败*/abort();}
我忘了提到我的程序是用spiral.c编写的,并且创建了一个名为spiral.exe的可执行文件。正如用法说明所示,您只需从命令行“spiral”调用即可。您对传递给可执行文件的参数是否陌生?在本例中,“n”包含在argv[1]中。对不起,我对传递给可执行文件的参数真的很陌生。你能提供一些链接来了解它或提供一些关于它的进一步信息吗?只需谷歌“main arguments C”。要测试上面的代码,你只需要使用if(argc==2)
检查并将scanf替换为n=atoi(argv[1]);
行。