要弄一个比如输入3就输出 1 2 4
3 5 7
6 8 9 这样的类似矩阵
求代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 3;
int * p = (int *)malloc(sizeof(int) * n * n);
int cx = 0, cy = 0;
int i;
for (i = 1; i <= n * n; i++)
{
p[cy * n + cx] = i;
if (cy == n - 1) { cy = cx + 1; cx = n - 1; continue; }
if (cx == 0) { cx = cy + 1; cy = 0; continue; }
cx--;
cy++;
}
for (i = 0; i < n * n; i++)
{
printf("%d\t", p[i]);
if (i % n == n - 1) printf("\n");
}
}
你这规律不对吧。
应该是:
1 2 3
4 5 6
7 8 9
这样?
if(int i=1;i<=N;i++)
{
if(int j =1;j<=N;j++)
{
Console.Write(" "+j);
}
Console.WriteLine();
}
你这是三阶幻方矩阵,用 Matlab 的话,一个指令就好了:M=magic(3)
如果不用matlab的话,就要看幻方矩阵的算法了:
这是 C 的实现
http://blog.csdn.net/tengweitw/article/details/17687377
可做参考
int N = 3;
for (int i = 0; i < N*N; i++)
{
if (i % N == 0)
{
Console.WriteLine();
}
Console.Write(" {0}",i+1);
}
Console.ReadLine();
1 2 4
3 5 7
6 8 9
Exited: ExitFailure 10
这样多简单
package 矩阵;
public class Jz {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=1;i<=9;i++){
System.out.print(i+"\t");
if(i%3==0){
System.out.println();
}
}
}
}
稍微改一下
package 矩阵;
import java.util.Scanner;
public class Jz {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
System.out.println("请输入整数N");
int n=in.nextInt();
for(int i=1;i<=n;i++){
System.out.print(i+"\t");
if(i%3==0){
System.out.println();
}
}
}
}
输入 一个n
for(int i=0 ; i<n ; i++){
for(int j=1; j<=n; j++)
printf("%d\t",j+n*i);
}
printf("\n");
}
这是z矩阵吧,规律应该是这个
如果二维数组中的元素matrix[i][j]中纵坐标j是偶数,且i = 0或者i = 7,那么遍历路径在矩阵中的走向就
是水平向右移动一格。
如果二维数组中的元素matrix[i][j]中纵坐标i是奇数,且j = 0或者j = 7,,那么遍历路径在矩阵中的走向
就是垂直向下移动一格。
除上述规则以外的情况,如果二维数组中的元素matrix[i][j]的横纵坐标和i + j是偶数,则遍历路径在矩阵
中的走向就是右上角移动一格;否则,若i + j是奇数,则遍历路径在矩阵中的走向就是左下角移动一格。
楼上好多大神! 学习学习
int main()
{
int n = 3;
int * p = (int *)malloc(sizeof(int) * n * n);
int cx = 0, cy = 0;
int i;
for (i = 1; i <= n * n; i++)
{
p[cy * n + cx] = i;
if (cy == n - 1) { cy = cx + 1; cx = n - 1; continue; }
if (cx == 0) { cx = cy + 1; cy = 0; continue; }
cx--;
cy++;
}
for (i = 0; i < n * n; i++)
{
printf("%d\t", p[i]);
if (i % n == n - 1) printf("\n");
}
}
for(int i=0 ; i<n ; i++){
for(int j=1; j<=n; j++)
printf("%d\t",j+n*i);
}
printf("\n");
}