输入两个数,第一个数决定一个nXn的矩阵
2014-12-28 10:56
120 查看
输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限
比如:
输入:5 18
输出:p q
1 2 3 4 5
16 17 18 0 6
15 0 0 0 7
14 0 0 0 8
13 12 11 10 9
#include <stdio.h>
#define RIGHT 1
#define DOWN 2
#define LEFT 3
#define UP 4
int main(int argc, const char * argv[]) {
int a[20][20]={};
int n, m;
scanf("%d%d", &n,&m);
if (n<1||m<1||m>n*n||n>20) {
return -1;
}
int type=RIGHT;//1:从左往右赋值 2:从上往下赋值 3:从右往左赋值4:从下往上赋值
int p=0,q=0;
int s1=n-1;
int s2=n-1;
int s3=0;
int s4=1;
int i=1;
while (i<=m) {
a[p][q]=i;
switch (type) {
case RIGHT:
if (++q==s1) {//判断是否到边界
type = DOWN;
s1--;
}
break;
case DOWN:
if (++p==s2) {
type = LEFT;
s2--;
}
break;
case LEFT:
if (--q==s3) {
type = UP;
s3++;
}
break;
case UP:
if (--p==s4) {
type=RIGHT;
s4++;
}
break;
default:
break;
}
i++;
}
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
printf("%4d", a[i][j]);
}
printf("\n");
}
return 0;
}
比如:
输入:5 18
输出:p q
1 2 3 4 5
16 17 18 0 6
15 0 0 0 7
14 0 0 0 8
13 12 11 10 9
#include <stdio.h>
#define RIGHT 1
#define DOWN 2
#define LEFT 3
#define UP 4
int main(int argc, const char * argv[]) {
int a[20][20]={};
int n, m;
scanf("%d%d", &n,&m);
if (n<1||m<1||m>n*n||n>20) {
return -1;
}
int type=RIGHT;//1:从左往右赋值 2:从上往下赋值 3:从右往左赋值4:从下往上赋值
int p=0,q=0;
int s1=n-1;
int s2=n-1;
int s3=0;
int s4=1;
int i=1;
while (i<=m) {
a[p][q]=i;
switch (type) {
case RIGHT:
if (++q==s1) {//判断是否到边界
type = DOWN;
s1--;
}
break;
case DOWN:
if (++p==s2) {
type = LEFT;
s2--;
}
break;
case LEFT:
if (--q==s3) {
type = UP;
s3++;
}
break;
case UP:
if (--p==s4) {
type=RIGHT;
s4++;
}
break;
default:
break;
}
i++;
}
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
printf("%4d", a[i][j]);
}
printf("\n");
}
return 0;
}
相关文章推荐
- 对面试题“输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现?”的理解
- 输入一个n ,然后在屏幕上打印出NxN 的矩阵!
- 输入一个nxn矩阵各元素的值,球出两条对角线元素之和
- 05年华中科大机试第二题(输入一个四行五列的矩阵,找出每列最大的两个数)
- zigzag数组:输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组
- zigzag数组:输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组
- 第九周试验任务四--建立一个二维数组类Douary,完成矩阵的输入、输出、加、减、相等判断等操作
- 输入一个整型数组(10个) 把最大的与第一个交换输出
- 每天学习一算法系列(14) (输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字)
- 一个简单的C++程序:输入两个整数,通过调用函数求两个数中的较大值
- 【c++】输入一个n×n的矩阵,求出两条对角线元素值之和【原创技术】
- 输入一个n,在屏幕上打印出N*N的矩阵(华为面试题)
- 输入两个数,并显示他们,但拒绝接受两个数都大于10的情况,且要求用户从新输入.看看其中的一个(但不是两个)是否大于10.
- 偶写的第一个控件,一个用选择代替输入的Edit控件
- 第九周实验报告任务4 建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数,完成矩阵的输入、输出、加、减、相等判断等操作。
- 第九周任务四(建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数,完成矩阵的输入、输出、加、减、相等判断等操作。)
- 第九周任务四之 建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数,完成矩阵的输入、输出、加、减、相等判断等操作。
- 输入一个n*n的字符矩阵,把它逆时针旋转90度后输出
- 《C++第九周实验报告4-1》---建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数, //完成矩阵的输入、输出、加、减、相等判断等操作。
- 1. 请用C#的面向对象语言 实现 一个计算器控制台程序,要求输入两个数和运算符号,得到结果