输入一个维度,逆时针打印出一个指定的矩阵

题目:用户给定一个维度,打印出指定的一个矩阵,例如用户给定10,输出应该如下图所示:

程序如下:

#include <stdio.h>
#include <malloc.h>

int main()
{
	int dimension;
	int *p;
	int startx, starty, endx, endy;
	int i, j, value = 0;

	printf("Please input dimension:");
	scanf("%d", &dimension);
	p = (int *)malloc(sizeof(int)*dimension*dimension);
	startx = 0;
	starty = 0;
	endx = dimension - 1;
	endy = dimension - 1;

	while(startx <= endx)
	{
		if(startx == endx) //只剩一个点需要赋值
		{
			p[endy*dimension+endx] = value++;
			break;
		}
		for(i = starty, j = startx; i <= endy; i++) //从上到下
		{
			p[i*dimension+j] = value ++;
		}

		for(i-=1, j = startx+1; j <= endx; j++) //从左到右, i在从上到下的输入中已经超出了矩阵范围,所以需要减1
		{
			p[i*dimension+j] = value++;
		}

		for(j-=1, i -= 1; i >= starty; i--) //从下到上
		{
			p[i*dimension+j] = value++;
		}

		for(i+=1, j -= 1; j > starty; j--) //从右到左
		{
			p[i*dimension+j] = value++;
		}

		startx ++;
		starty ++;
		endx --;
		endy --;
	}

	for(i = 0; i < dimension*dimension; i++)
	{
		if(0 == i%dimension)
			printf("\n");
		printf("%3d ", p[i]);
	}
	printf("\n\n");

	return 0;
}

程序运行结果:

输入一个维度,逆时针打印出一个指定的矩阵,布布扣,bubuko.com

时间: 2024-12-18 06:32:07

输入一个维度,逆时针打印出一个指定的矩阵的相关文章

反射---输入一个类,打印出类中所有元素

package com.sadhu; import java.util.*; import java.lang.reflect.*; /** 反射---输入一个类,打印出类中所有元素 reflect包中有三个描述类元素的类:Field.Method.Constructor */ public class Sample {     public static void main(String[] args)     {         String name;//收集用户输入的类         

输入一个字符串,打印出该字符串的所有排列

目录 输入一个字符串,打印出该字符串的所有排列. 题解 输入一个字符串,打印出该字符串的所有排列. 例如输入字符串abc,则输出由字符a.b.c所能排列出来的所有字符串 abc,acb,bac,bca,cab,cba. 题解 了解下排列的数学知识: 排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列:从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号

scala基础题--函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔

函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔 import scala.io.StdIn object work02 { def main(args: Array[String]): Unit = { println("请输入一个数") var num:Int=StdIn.readInt() val pige=(num:Int)=>{ for (i<-1 to num){ for (j<-1 to num-i){ print("

【练习题】编写打印出一个单链表的所有元素的程序【链表】

只是实现了链表ADT的部分功能. /*---编写打印出一个单链表的所有元素的程序---*/ #include <stdio.h> #include <stdlib.h> struct Node{ int val; struct Node *next; }; Node *findEnd(Node *list){ while(list->next) list = list->next; return list; } void insert(int val, Node *li

【源码】用1,2,2,3,4,5这六个数字,写一个函数,打印出所有不同的排序,要求:4不能放在第三位,3与5不能相连(C语言实现)

帮朋友做的,好像是一个面试题.暴力方式. #include <stdio.h> #include <stdlib.h> #include <string.h> //判断这个数是不是由1.2.2.3.4.5几位数字组成 int func(int n) { int a[5] = {0}; for(int i = 0; i < 6; i++) { int bit = n % 10; n /= 10; switch(bit) { case 1: a[0]++; break

java用星星符号打印出一个直角三角形

1 package debug; 2 3 public class Demo10 { 4 public static void main(String[] args) { 5 //用星星符号打印出一个直角三角形 6 for(int i=1;i<=5;i++) { 7 //每一列打印的星星个数跟行数相同 ,所以在下面for循环中将条件中最大值设置为行数 8 for(int j=1;j<=i;j++) { 9 System.out.print("*"); 10 } 11 Sys

如何用一层for循环打印出一个二维数组

常规通过两层for循环可以比较轻松打印二维数组. 代码如下: #include <stdio.h> #define ROWS 3 #define COLS 3 int main() { int a[ROWS][COLS]={1,2,3,4,5,6,7,8,9}; for(int i=0;i<ROWS;i++) { for(int j=0;j<COLS;j++) printf("%d ",a[i][j]); printf("\n"); } re

Android 点击一个按钮,弹出一个对话框

界面非常的简单,就是一个Button,点击这个Button呢,会弹出一个对话框 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout

python脚本3_输入若干个整数打印出最大值

#输入若干个整数,打印出最大值 # m = int(input('Input first number >>>')) while True: c = input('Input a number >>>') if c: n = int(c) if n > m: m = n print('Max is',m) else: break 原文地址:https://www.cnblogs.com/KunGe-13/p/10203101.html