九宫格题目求纠错
题目:以中下格为起点,按右下为方向顺序填写(想象格子上下相连,左右相连),遇到右下格已占,填入正上方格内。
我的代码:
#include<stdio.h>
int main()
{
int i,j,n,x1,y1;
scanf("%d",&n);
int a[n][n];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[j][i]=0;
}
int x,y;
x=n/2;
y=n-1;
int m=1;
while(1)
{
a[y][x]=m;
m++;
if(m>(n*n))
break;
else
{
x1=x+1;
x1=(x1%n);
y1=y+1;
y1=(y1%n);
if(a[y1][x1]!=0)
{
y--;
}
if(y<0)
{
y+=n;
}
else
{
x=x1;
y=y1;
}
}
}
}
for(i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
printf("%4d ",a[i][j]);
}
printf("\n");
}
return 0;
}
在原代码上修改,可以运行了,并且上面的图也是有点错的
#include<stdio.h>
int main()
{
int i,j,n,x1,y1;
scanf("%d",&n);
int a[n][n];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[j][i]=0;
}
} /*for到此结束,只是一个初始化为0就行了*/
int x,y;
x=n/2;
y=n-1;
int m=1;
while(1)
{
a[y][x]=m;
m++;
if(m>(n*n))
break;
else
{
x1=x+1;
x1=(x1%n);
y1=y+1;
y1=(y1%n);
if(a[y1][x1]!=0)
{
y1--; /*这里是y1,不是y,因为操作的是y1*/
}
if(y1<0)
{
y1+=n;
}
//else /*删除*/
//{/*删除*/
x=x1;/*上面更新了x1和y1直接赋值就行*/
y=y1;
//}/*删除*/
}
}
for(i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
printf("%4d ",a[i][j]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int i,j,n,x,y;
scanf("%d",&n);
int a[n][n];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[j][i]=0;
}
}
x=n/2;y=n-1;
a[x][y] = 1;
for(i = 2;i<=n*n;i++)
{
x++;
y++;
if(x>=n)
{
x=0;
}
if(y>=n)
{
y=0;
}
if(a[x][y] != 0)
{
x=x-1;
y=y-2;
if(x<0)
{
x=x+n;
}
if(y<0)
{
y=y+n;
}
}
a[x][y]=i;
}
for(i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
printf("%4d ",a[j][i]);
}
printf("\n");
}
return 0;
}
C语言:解决九宫格问题
如有帮助,望采纳
#include <stdio.h>
int main()
{
unsigned char array[3][3] = {{1, 1, 1}, {1, 1, 1}, {1, 1, 1}};
for(array[0][0] = 1; array[0][0] < 10; array[0][0]++)
{
for(array[0][1] = 1; array[0][1] < 10; array[0][1]++)
{
if(array[0][1] == array[0][0])
continue;
for(array[0][2] = 1; array[0][2] < 10; array[0][2]++)
{
if(array[0][2] == array[0][0])
continue;
if(array[0][2] == array[0][1])
continue;
if((array[0][0] + array[0][1] + array[0][2]) != 15)
continue;
for(array[1][0] = 1; array[1][0] < 10; array[1][0]++)
{
if(array[1][0] == array[0][0])
continue;
if(array[1][0] == array[0][1])
continue;
if(array[1][0] == array[0][2])
continue;
for(array[1][1] = 1; array[1][1] < 10; array[1][1]++)
{
if(array[1][1] == array[0][0])
continue;
if(array[1][1] == array[0][1])
continue;
if(array[1][1] == array[0][2])
continue;
if(array[1][1] == array[1][0])
continue;
for(array[1][2] = 1; array[1][2] < 10; array[1][2]++)
{
if(array[1][2] == array[0][0])
continue;
if(array[1][2] == array[0][1])
continue;
if(array[1][2] == array[0][2])
continue;
if(array[1][2] == array[1][0])
continue;
if(array[1][2] == array[1][1])
continue;
if((array[1][0] + array[1][1] + array[1][2]) != 15)
continue;
for(array[2][0] = 1; array[2][0] < 10; array[2][0]++)
{
if(array[2][0] == array[0][0])
continue;
if(array[2][0] == array[0][1])
continue;
if(array[2][0] == array[0][2])
continue;
if(array[2][0] == array[1][0])
continue;
if(array[2][0] == array[1][1])
continue;
if(array[2][0] == array[1][2])
continue;
if((array[0][0] + array[1][0] + array[2][0]) != 15)
continue;
for(array[2][1] = 1; array[2][1] < 10; array[2][1]++)
{
if(array[2][1] == array[0][0])
continue;
if(array[2][1] == array[0][1])
continue;
if(array[2][1] == array[0][2])
continue;
if(array[2][1] == array[1][0])
continue;
if(array[2][1] == array[1][1])
continue;
if(array[2][1] == array[1][2])
continue;
if(array[2][1] == array[2][0])
continue;
if((array[0][1] + array[1][1] + array[2][1]) != 15)
continue;
for(array[2][2] = 1; array[2][2] < 10; array[2][2]++)
{
if(array[2][2] == array[0][0])
continue;
if(array[2][2] == array[0][1])
continue;
if(array[2][2] == array[0][2])
continue;
if(array[2][2] == array[1][0])
continue;
if(array[2][2] == array[1][1])
continue;
if(array[2][2] == array[1][2])
continue;
if(array[2][2] == array[2][0])
continue;
if(array[2][2] == array[2][1])
continue;
if((array[2][0] + array[2][1] + array[2][2]) != 15)
continue;
if((array[0][2] + array[1][2] + array[2][2]) != 15)
continue;
if((array[0][0] + array[1][1] + array[2][2]) != 15)
continue;
if((array[0][2] + array[1][1] + array[2][0]) != 15)
continue;
printf("%d %d %d\n", array[0][0], array[0][1], array[0][2]);
printf("%d %d %d\n", array[1][0], array[1][1], array[1][2]);
printf("%d %d %d\n", array[2][0], array[2][1], array[2][2]);
printf("\n");
}
}
}
}
}
}
}
}
}
getchar();
}
顶一个
#include<stdio.h>
int main()
{
// 获取矩阵的大小
int n;
printf("请输入矩阵的大小:");
scanf("%d", &n);
// 初始化矩阵
int a[n][n];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
a[i][j] = 0;
}
}
// 设置矩阵的起点和方向
int x = n / 2;
int y = n - 1;
int dx = 1;
int dy = 1;
// 填充矩阵
int m = 1;
while (1)
{
// 将当前位置的值赋为m
a[y][x] = m;
m++;
// 如果已经填完矩阵,则退出循环
if (m > n * n)
break;
// 计算下一个位置的坐标
int x1 = x + dx;
int y1 = y + dy;
// 如果下一个位置已被占用,则改变方向
if (a[y1][x1] != 0)
{
dy = -dy;
y1 = y + dy;
if (a[y1][x1] != 0)
{
dx = -dx;
x1 = x + dx;
}
}
// 更新当前位置的坐标
x = x1;
y = y1;
}
// 输出矩阵
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%4d ", a[i][j]);
}
printf("\n");
}
return 0;
}