求N阶螺旋矩阵的思路 && 多行输入的问题
发布网友
发布时间:2022-04-26 10:43
我来回答
共5个回答
热心网友
时间:2022-04-27 05:37
思路:
考虑走第一圈,分4段
记录第一段 开始的i0,j0 和 到达 的 i1
另3段走法 用 i0,j0,i1 描述
第二圈和后来圈的变化是i0 = i0+1;i1=i1-1;j0=j.
一共转 n/2 圈 就成功了。
每走一格,填入数值 v=v+1, v 初值1。
#include <stdio.h>
void main()
{
int x[25][25];
int ii,jj,n = 6;
int v=1;
int i0,i1,j0,j;
printf("Please enter n, n=3 to 25\n");
scanf("%d",&n);
i0=0; i1 = n -1;
for (j=0;j<=n/2;j++)
{
j0 = j;
for (ii=i0;ii<=i1;ii++) {x[j0][ii]=v; v++;};
for (jj=j0+1;jj<=i1;jj++) {x[jj][i1]=v; v++;};
for (ii=i1-1;ii >=i0;ii--) {x[i1][ii]=v; v++;};
for (jj=i1-1;jj >=i0+1;jj--) {x[jj][i0]=v; v++;};
i0 = i0+1;i1=i1-1;
}
for (jj=0;jj<n;jj++){
for (ii=0;ii<n;ii++) printf("%3d ",x[jj][ii]);
printf("\n");
}
}
====================
连续按两次回车键推出输入可以这样实现:
输入语句用 gets, 测字符串长度,长度0 则为回车,两次连续回车则退出,否则是数字,用sscanf 转字符串为数字。
void main(){
char str[20],str2[20];
int x;
Lab1:
printf("Enter value\n");
gets(&str[0]);
if ( strlen(str) == 0 ) {
gets(&str2[0]);
if (strlen(str2) == 0 ) {goto Lab2;} else { strcpy(str,str2);};
};
sscanf(&str[0],"%d",&x);
printf("x=%d\n",x);
goto Lab1;
Lab2:;
printf("finished\n");
}
你可以 把 x 赋给-> array[i]=x;i++;
热心网友
时间:2022-04-27 06:55
#include"stdio.h"
main()
{ int n,i,j,k,m,p,q1,q2,q3,q4,a[100][100];
scanf("%d",&n);
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
a[i][j]=0;
i=0;j=0;m=1;p=(int)(n/2.0+0.5);
for (k=1;k<=p;k++)
{ q1=j+(n-2*k+2);
for(j;j<q1;j++) {a[i][j]=m++; if(m>n*n)break;}
j--;
q2=i+(n-2*k+2);
for(i=i+1;i<q2;i++) {a[i][j]=m++; if(m>n*n)break;}
i--;
q3=j-(n-2*k+2);
for(j=j-1;j>q3;j--) {a[i][j]=m++; if(m>n*n)break;}
j++;
q4=i-(n-2*k+1);
for(i=i-1;i>q4;i--) {a[i][j]=m++; if(m>n*n)break;}
i++;
j++;
if(m>n*n)break;
}
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
我自己做了一下
热心网友
时间:2022-04-27 08:30
1.到我的空间来看看吧
2.用getchar来给int赋值是不行的。
你为啥一定要连续按两次确认退出循环?
一般来说,可以用EOF(Ctrl+Z)来结束输入。
while(scanf("%d",&array[i++])!=EOF);
热心网友
时间:2022-04-27 10:21
在这里说你也不清楚的
热心网友
时间:2022-04-27 12:29
想了半天也没想出来!