当前位置: 首页 > article >正文

【数据结构】寻找规律:算对角线长度||杨辉三角||魔方问题(C语言实现)

目录标题

  • 三个算法
    • 1. 求矩阵对角线元素之和(C语言)
    • 2. 杨辉三角
    • 3. 幻方问题
  • 总结:都是通过寻找规律来找出构造逻辑然后用循环来实现

三个算法

1. 求矩阵对角线元素之和(C语言)

1.初始化行循环变量i和列循环遍历j,求和变量sum,初始化全部的元素为0
2.用书输入9个数
3.执行换行之后

关键点:
1.对角线的元素的【i】和【j】是相等的[左上到右下]
2.右上到坐下的坐标,相加为2,那么i+j=2——>i=2-j

# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
 
int main()
{
	//初始化变量值;
	int i = 0;
	int j = 0;
	int sum = 0;
	int a[3][3] = { 0 };
 
	//获取数组a的值;
	printf("请输入9个整数!!!!\n");
	//循环;
	for (i = 0; i < 3; i++)
	{
		//列;
		for (j = 0; j < 3; j++)
		{
			//提示用户;
			printf("a[%d][%d]=", i, j);
			//获取用户输入的数据;
			scanf("%d", &a[i][j]);
		}
	}
 
	//换行;
	printf("\n");
 
	//提示用户;
	printf("您输入的矩阵为:\n");
	//打印数组;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			//打印;
			printf("%5d", a[i][j]);
		}
 
		//换行;
		printf("\n");
	}
 
	//换行;
	printf("\n");
 
	//运算;
	for (i = 0; i < 3; i++)
	{
		//运算;
		sum += a[i][i] ;
		sum += a[i][2-i];
	}
 
	//输出结果;
	printf("对角线之和为:%d", sum);
 
	return 0;
}

2. 杨辉三角

问题描述:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
用算法构造出来这样的三角形

规律:

  1. 第一列全为1,最后一列全为
    1)a[i]0[]=1
    2)for循环把最后一列变成1:a[i][i]=1
    3.其他元素遵循,这一行的数是上一行两数和:a[i][j]=a[i-1][j-1]+a[i-1][j]
#include <stdio.h>
void main(){
	int a[10][10],i,j;
	//第1列元素值为1 
	for(i=0;i<10;i++)
	a[i][0]=1;
	//对角线元素值为1
	for(i=0;i<10;i++)
	a[i][i]=1;
	//其它元素
	for(i=2;i<10;i++)
	for(j=1;j<i;j++)
	a[i][j]=a[i-1][j-1]+a[i-1][j];
	//输出杨辉三角
	for(i=0;i<10;i++)
	{
		for(j=0;j<=i;j++)
		printf("%8d",a[i][j]);
		printf("\n");
	 } 
}

3. 幻方问题

问题描述:幻方又称魔方阵,游戏规则是在一一个n*n的矩阵中填入1到n2的数字,使得每一行、每一列、每条对角线的累加和都相等。如图所示是一个3阶幻方,每一行、每一列每条对角线的累加和都等于15。
在这里插入图片描述
规律:
4. 1到2该如何挪动呢?

由1放在第一行中间开始填数,2在左边一行,2的下一个数字,在右边
可以这样设置:

  1. 左上角超出上边界,则在最下边对应的位置填入下一个数
  2. 左上角超出左边界,则在最右边对应的位置填入下一个数

在这里插入图片描述


	int arr[100][100]={0};    //假设最多为100行、100列 
	printf("请输入1-100内的奇数:\n");   //只处理为奇数的方阵 
	int num;
	scanf("%d",&num);
	int i,j;
	i=0;j=num/2;   
	arr[i][j]=1;  //将第一个值存入中间位置 
	int iTemp,jTemp;  //用于暂存当前位置 
	for(int k=2;k<=num*num;k++){
		iTemp=i;
		jTemp=j;
		if(--i<0){  //判断当前位置是否超出上边界 
			i=num-1;
		}
		if(--j<0){  //判断当前位置是否超出左边界 
			j=num-1;
		}
		if(arr[i][j]>0){  //如果该位置已经有数,则在该位置下面添加数字 
			i=iTemp+1;
			if(i==num){
				i=0;
			}
			j=jTemp;;
		}
		arr[i][j]=k;
	}
	for(int m=0;m<num;m++){
		for(int n=0;n<num;n++){
			printf("%d\t",arr[m][n]);
		}
		printf("\n");
	}

总结:都是通过寻找规律来找出构造逻辑然后用循环来实现


http://www.kler.cn/a/543286.html

相关文章:

  • 在Mac arm架构终端中运行 corepack enable yarn 命令,安装yarn
  • 计算机组成原理
  • 分发饼干(力扣455)
  • 在 Go 中实现事件溯源:构建高效且可扩展的系统
  • 内网ip网段记录
  • vue 主子表加校验问题
  • singleTaskAndroid的Activity启动模式知识点总结
  • 做站群应该选择什么服务器?
  • C#03项目——Typeof的用法
  • 深度学习-112-大语言模型LLM之langchain的聊天模型概述和基本概念介绍
  • Golang GORM系列:GORM 高级查询教程
  • SQL Server 逻辑查询处理阶段及其处理顺序
  • tcp传输协议机制
  • 用php tp6对接钉钉审批流的 table 表格 明细控件 旧版sdk
  • 硬件学习笔记--39 电磁兼容试验-3射频电磁场试验介绍
  • 一、计算机等级考试——标准评分
  • 当Axure遇见DeepSeek:设计工具的革命性进化
  • 视频理解新篇章:Mamba模型的探索与应用
  • Spring中常见的设计模式
  • Flutter PIP 插件 ---- iOS Video Call
  • python基础入门:6.3异常处理机制
  • 鸿蒙HarmonyOS NEXT开发:横竖屏切换开发实践
  • Git与Github远程仓库使用
  • Vue项目能进行哪些性能优化?
  • WPS OFFICE制作多级下拉菜单
  • Java实现模版方法模式